728x90
반응형
이 코드는 Python으로 작성했습니다.
# 상하좌우
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
# 현재 위치를 들고 다니지 않을때
# r,c 좌표, road는 지금까지 조성된 등산로의 길이, skill 공사 유무
def work(r, c, road, skill):
global ans
if road > ans:
ans = road
visited[r][c] = 1
for i in range(4):
nr = r + dr[i]
nc = c + dc[i]
if 0 <= nr < N and 0 <= nc < N and not visited[nr][nc]:
# a.현위치보다 낮은곳으로 이동할 때.
if mountain[r][c] > mountain[nr][nc]:
work(nr, nc, road + 1, skill)
# b.현위치보다 높거나 같은 곳으로 이동할 때
elif skill and mountain[r][c] > mountain[nr][nc] - K:
tmp = mountain[nr][nc] # 기록
mountain[nr][nc] = mountain[r][c] - 1
work(nr, nc, road + 1, 0) # 스킬 사용
mountain[nr][nc] = tmp # 원상복구
visited[r][c] = 0
T = int(input())
for tc in range(1, T + 1):
N, K = map(int, input().split()) # N : 한변의 길이, K: 최대 공사가 가능한 깊이
# N*N 크기의 2차원 리스트(배열)이 주어진다.
mountain = [list(map(int, input().split())) for _ in range(N)]
max_h = 0
# 최고 높이의 봉우리를 찾는 과정
for i in range(N):
for j in range(N):
if max_h < mountain[i][j]:
max_h = mountain[i][j]
visited = [[0] * N for _ in range(N)]
ans = 0
for i in range(N):
for j in range(N):
if mountain[i][j] == max_h:
work(i, j, 1, 1) # 좌표, 길, 스킬
print("#{} {}".format(tc, ans))
문제 출처 : SW Expert Academy
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
728x90
반응형
'Algorithm for Coding Test > Swea' 카테고리의 다른 글
SWEA 1953 [모의 SW 역량테스트] 탈주범 검거 (0) | 2021.10.07 |
---|---|
SWEA 1952 [모의 SW 역량테스트] 수영장 (0) | 2021.10.07 |
SWEA D4 1232 사칙연산 (0) | 2021.10.07 |
SWEA D4 1231 중위순회 (0) | 2021.10.07 |
SWEA D4 1226 미로1 (0) | 2021.10.07 |