[백준] 14890번 경사로- 파이썬

2022. 4. 3. 13:42·알고리즘 공부/구현

https://www.acmicpc.net/problem/14890

 

14890번: 경사로

첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다.

www.acmicpc.net

import sys

n, l= map(int, sys.stdin.readline().split())
graph = []

for i in range(n):
    graph.append(list(map(int,sys.stdin.readline().split())))

def check_garo(i):
    # 가로 라인 확인
    # c는 경사로를 둔 곳이다.
    c = [0 for _ in range(n)]
    for j in range(n-1):
        if abs(graph[i][j] - graph[i][j+1]) > 1:
            return 0
        # 오르막인 경우
        if graph[i][j] < graph[i][j+1]:
            temp = [0 for _ in range(n)]
            for k in range(l):
                # 뒤로 경사로를 둘수 있는지 체크
                if j - k < 0:
                    return 0
                # 평평한지랑 이전에 둔 경사로 있는지 확인
                if graph[i][j] != graph[i][j-k] or c[j-k] != 0:
                    return 0
                temp[j - k] = 1
            c = temp
        # 내리막길
        elif graph[i][j] > graph[i][j+1]:
            temp = [0 for _ in range(n)]
            for k in range(l):
                if j+k+1 >= n:
                    return 0
                if graph[i][j+1] != graph[i][j+1+k] or c[j+k+1] != 0:
                    return 0
                temp[j + k + 1] = 1
            c = temp
    return 1

def check_sero(j):
    c = [0 for _ in range(n)]
    for i in range(n-1):
        if abs(graph[i][j]- graph[i+1][j]) > 1:
            return 0
        if graph[i][j]< graph[i+1][j]:
            temp = [0 for _ in range(n)]
            for k in range(l):
                if i - k < 0:
                    return 0
                if graph[i][j] != graph[i-k][j] or c[i-k] !=0:
                    return 0
                temp[i-k] = 1
            c =temp
        elif graph[i][j] > graph[i + 1][j]:
            temp = [0 for _ in range(n)]
            for k in range(l):
                if i + k + 1 >= n:
                    return 0
                if graph[i + 1][j] != graph[i + k + 1][j] or c[i + k + 1] != 0:
                    return 0
                temp[i + k + 1] = 1
            c = temp

    return 1
ans = 0

for i in range(n):

    ans += check_garo(i)
    ans += check_sero(i)

print(ans)

진짜 도저히 생각이 안나서 

아래의 블로그를 참고하고 풀었습니다.

https://chldkato.tistory.com/154

 

백준 14890 경사로 (파이썬)

https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다...

chldkato.tistory.com

로직에 대한 설명은 코드에 같이 적어두었습니다.

 

이 문제를 풀며 배운점

처음에는 모든 그래프를 for 문을 돌면서 풀려했는데

이렇게 위와 같은 방법으로 작게 나누어서 푸는 법도 있다는걸

다시 깨달았다

한번에 하기 어려운 문제는 작게 나누어서 접근해보자!

반응형

'알고리즘 공부 > 구현' 카테고리의 다른 글

[백준] 17140번 이차원 배열과 연산- 파이썬  (0) 2022.04.06
[백준] 14499번 주사위 굴리기- 파이썬  (0) 2022.04.01
[백준] 17144번 미세먼지 안녕!- 파이썬  (0) 2022.03.31
[백준] 15685번 드래곤 커브- 파이썬  (0) 2022.03.30
[백준] 14891번 톱니바퀴- 파이썬  (0) 2022.03.27
'알고리즘 공부/구현' 카테고리의 다른 글
  • [백준] 17140번 이차원 배열과 연산- 파이썬
  • [백준] 14499번 주사위 굴리기- 파이썬
  • [백준] 17144번 미세먼지 안녕!- 파이썬
  • [백준] 15685번 드래곤 커브- 파이썬
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    DFS
    C언어 기초
    인접행렬
    백준
    이미지처리
    프로그래머스
    정렬
    if문
    삽입 정렬
    알고리즘
    코딩기초스킬
    n진법 변환
    인접리스트
    BFS
    스택
    코딩
    c언어
    소수찾기
    코딩문제
    큐
    코딩테스트
    자료구조
    코딩기초
    왜곡보정
    다이나믹 프로그래밍
    캘리브레이션
    에라토슽네스의 체
    선택정렬
    순차 탐색
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
[백준] 14890번 경사로- 파이썬
상단으로

티스토리툴바