Algorithm/코드트리

[코드트리] 숫자가 더 큰 인접한 곳으로 이동 - 파이썬

potato_pizza 2024. 8. 5. 11:05
728x90

코드트리

문제

https://www.codetree.ai/missions/2/problems/move-to-larger-adjacent-cell?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드

  • while 문을 사용
  • moved를 활용해 조건에 만족하지 않을 때까지 계속 이동하도록 구현
  • 상, 하, 좌, 우의 우선순위에 따라 이동하기 때문에 가장 큰 수로 이동하지 않도록 구현 
    • for문을 사용해서 (상, 하, 좌, 우) 순서대로 작동하도록 
  • 격자판 내에서 가장 큰 수가 없다면 moved = False
n, r, c = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]

dx = [-1, 1, 0, 0]  # 상, 하, 좌, 우에 해당하는 x 방향 이동
dy = [0, 0, -1, 1]  # 상, 하, 좌, 우에 해당하는 y 방향 이동

# 0-based index로 변환
r -= 1  
c -= 1  

# 결과를 저장할 리스트
result = [graph[r][c]]

while True:
    moved = False
    # 4 방향에 대해 우선순위 고려
    for i in range(4):
        new_r = r + dx[i]
        new_c = c + dy[i]

        # 범위 안에 있고 현재 위치보다 값이 큰 경우
        if 0 <= new_r < n and 0 <= new_c < n and graph[new_r][new_c] > graph[r][c]:
            r, c = new_r, new_c
            result.append(graph[r][c])
            moved = True
            break

    # 더 이상 이동할 수 없을 때 종료
    if not moved:
        break

print(*result)
728x90
반응형