개발조아

[SWEA] 1210 [S/W 문제해결 기본] 2일차 - Ladder1 파이썬 본문

알고리즘/SWEA

[SWEA] 1210 [S/W 문제해결 기본] 2일차 - Ladder1 파이썬

개발조아 2021. 8. 11. 13:59
728x90

문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh 

 

SW Expert Academy

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

swexpertacademy.com

 

목적지에서 출발하여 위로 올라가면서 맨 윗줄에 도달했을 때의 y 좌표를 출력하면 된다.

올라가면서 좌우 확인하고 다리가 있다면 그 방향으로 0이 나올때 까지 쭉 확인하고 다시 위로 올라가면 된다.

 

dx = [0, -1, 0]
dy = [-1, 0, 1]

def solv(t):
    global board
    input()
    board = [list(map(int, input().split())) for _ in range(100)]

    sx = 99
    sy = board[99].index(2)
    print('#%d %d'%(t, simul(sx,sy)))
def simul(x,y):
    while x != 0:
        d = check_side(x,y)
        if d in [0,2]:
            x,y = move_side(x,y,d)
        else:
            x += dx[d]
            y += dy[d]
    return y
def move_side(x,y,d):
    while 0 <= y <= 99 and board[x][y] == 1:
        y += dy[d]
    y -= dy[d]
    x -= 1
    return x,y
def check_side(x,y):
    if y not in [0,99]:
        if board[x][y+1] == 1:
            return 2
        elif board[x][y-1] == 1:
            return 0
        else:
            return 1
    elif y == 0 and board[x][y+1] == 1:
            return 2
    elif y == 99 and board[x][y-1] == 1:
            return 0
    else:
        return 1

for t in range(1,11):
    solv(t)
Comments