Algorithm/SW Expert Academy

[Python] 1210. ladder1

느낌표 공장장 2021. 9. 6. 23:04
# 벡터설정  (좌우상)
# 좌우는 상관없지만, 위로 가는 것이 마지막이어야 한다.
# 사다리에서는 좌우 탐색이 우선이기 때문
dx = [-1, 1, 0]
dy = [0, 0, -1]

for idx in range(1, 11):
    n = int(input())
    # 사다리 받아오기
    ladder = [list(map(int, input().split())) for _ in range(100)]

    # 목표지점부터 시작하면 한번만 탐색하면 된다.
    x = ladder[99].index(2) # 목표지점(2)의 인덱스 찾기
    y = 99                  # 맨 밑에서부터 시작하는 y좌표
    k = 0                   # 방향 설정을 담당하는 K

    # y가 0인덱스까지 도달할때까지 반복한다.
    while y > 0:
        nx = x + dx[k]  # 이동하고자 하는 k방향으로 x좌표 움직이기
        ny = y + dy[k]  # 이동하고자 하는 k방향으로 y좌표 움직이기

        # 전체 사다리에서 나가지 않고, 이동하고자 하는 곳의 값이 사다리이면 (연결되어있다면 (1이라면))) 조건문 실행
        if 0 <= nx < 100 and 0 <= ny < 100 and ladder[ny][nx]:
            ladder[ny][nx] = 0  # 지나온 자리를 0으로 바꿔준다. (중복 탐색 방지를 위해)
            x = nx              # x를 nx로 업뎃
            y = ny              # y를 ny로 업뎃
            k = 0               # k를 맨 처음으로 초기화. (이동한 곳에서 다시 탐색해야 하므로)

        # 이동하고자 하는 곳이 전체 사다리 범위에서 벗어나거나, 사다리로 이어진 부분이 아니라면(0일경우)
        else:
            # 방향을 바꿔준다.
            k = (k+1) % 3

    # y가 0이라면 시작지점에 도달한 것이므로 x좌표를 출력한다.
    print('#{} {}'.format(idx, x))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 4837. 부분집합의 합  (0) 2021.09.06
[Python] 4836. 색칠하기  (0) 2021.09.06
[Python] 1954. 달팽이 숫자  (0) 2021.08.11
[Python] 1209. sum  (0) 2021.08.11
[Python] 1208. Flatten  (0) 2021.08.11