1210. [S/W 문제해결 기본] 2일차 - Ladder1

D4

Problem

SW Expert Academy Ladder1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


Solution

시작은 여러 곳일 수 있지만, 끝은 하나인 경우 끝부터 시작하면 편하다.
1. 시작 위치를 아래에서 찾는다.
2. 시작 위치를 기준으로 1을 따라서 간다.
3. 우선순위가 위보다 좌, 우에 있으므로 좌, 우부터 탐색한다.
4. 지나온 곳을 탐색할 수 없도록, 지나온 곳을 표시한다.(지워도 된다.)


Code

for test_case in range(1, 11):
    T = int(input())
    # 인덱싱을 편하게 하기위한 0 패딩
    ladder = [[0] + list(map(int, input().split())) + [0] for _ in range(100)]
    # 시작점 찾기
    for i in range(1,102):
        if ladder[99][i] == 2:
            fin_idx = i
    # 방향은 위와 좌, 우만 필요
    di = [0, 0, -1]
    dj = [-1, 1, 0]
    # 시작 인덱스
    recent_i = 99
    recent_j = fin_idx
    while recent_i != 0: # colum이 1이 아니면 끝남
        for k in range(3):
            if ladder[recent_i+di[k]][recent_j+dj[k]] == 1:
                ladder[recent_i][recent_j] = 2	# 지나온 곳 지우기
                recent_j += dj[k]
                recent_i += di[k]
                break
        # 범위를 벗어나면 끝냄(혹시나 모를 예외처리)
        if recent_i < 0 or recent_j < 0 or recent_i >= 102 or recent_j >= 102:
            break
    print(f'#{T} {recent_j-1}')


<부족한 부분은 댓글로 남겨주시면 저에게 도움이 됩니다!>

반응형