문제

이 문제는 사실 문제를 이해하는게 가장 어려웠던 문제였던거 같다 조건이 많고 문제가 한번에 이해되지 않아서 애를 먹었다..
경사로는 크게 두가지 종류가 있다

내려가는 경사로가 될 조건
(1) 현재 좌표가 이전 좌표보다 1 낮다.
(2) 현재좌표부터 L개의 좌표의 높이가 같다.
(3) 현재 좌표부터 L개의 좌표에 올라가는 경사로가 설치되어 있지 않아야한다
올라가는 경사로가 될 조건
(1) 현재 좌표가 이전 좌표보다 1 낮다.
(2) 이번좌표부터 L개의 좌표의 높이가 같다.
(3) 이번 좌표부터 L개의 좌표에 올라가는 경사로가 설치되어 있지 않아야한다
이를 바탕으로 구현을 하게 되면 아래와 같은 코드가 나온다
정답코드
#높이차가 1이고 그러한 칸의 길이가 L의 배수일때 1 높일 수 있음
# n<=100
n,l = map(int,input().split())
graph = [list(map(int,input().split())) for _ in range(n)]
def check(line):
bridge = [False for _ in range(n)]
for i in range(1,n):
if abs(line[i-1] - line[i])>1:
return False
else:
#오른쪽
if (line[i-1]-line[i]) == 1:
for j in range(l):
#그래프 밖으로 나가는 경우
if i+j>= n:
return False
if line[i]!=line[i+j]:
return False
if bridge[i+j] == True:
return False
if bridge[i+j] == False:
bridge[i+j] = True
#왼쪽
elif (line[i-1]-line[i])== -1:
for j in range(l):
if i-1-j <0 :
return False
if line[i-1] != line[i-j-1]:
return False
if bridge[i-1-j] == True:
return False
if bridge[i-1-j] == False:
bridge[i-1-j] = True
return True
ans = 0
#가로
for i in range(n):
if check(graph[i]):
ans += 1
#세로
for j in range(n):
if check([graph[i][j] for i in range(n)]):
ans += 1
print(ans)
구현문제인 만큼 문제를 이해하고 조건을 정리하는게 가장 어려웠던 문제였다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준]10986번 나머지 합 python (0) | 2025.07.03 |
|---|---|
| [백준] 1238 파티 -python 파이썬 (0) | 2025.05.21 |
| [백준]2252번 줄세우기 - python (위상정렬) (0) | 2025.05.19 |
| [백준]11657 타임머신 - Python 파이썬 (0) | 2025.04.18 |
| [백준] 1253번 좋다 - python 파이썬 (0) | 2025.04.17 |