park는 공원을 나타내는 2차원배열이고 시작은 S 갈수 있는곳은 O 못가는곳은 X이다. routes는 'W 2'와 같이 서쪽으로 2번 가라는 명령인데 공원을 벗어나거나 X를 만나면 무시한다. routes를 실행해 최종 좌표를 출력하자

def solution(park, routes):
    answer = []
    dir = {'E':[1,0],'S':[0,1],'W':[-1,0],'N':[0,-1]}
    dist = {'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
    start=[]
    maxx = len(park[0])
    maxy = len(park)
    for y, row in enumerate(park):
        for x,v in enumerate(row):
            if v == 'S':
                start = [y,x]
    for command in routes:
        move = dir[command[0]]
        distant = dist[command[2]]
        mx = start[1]
        my = start[0]
        for i in range(1,distant+1):
            y = my + move[1]
            x = mx + move[0]
            if  x >= 0 and y >= 0 and x < maxx and y < maxy and park[y][x] != 'X':
                my = y
                mx = x
                if i == distant:
                    start[0] = my
                    start[1] = mx
            else:
                continue

    return start

park = ["OSO","OOO","OXO","OOO"]
routes = ["E 2","S 3","W 1"]
print(solution(park, routes))

방향을 난 쳐 넣었는데 이분은 zip을 이용해 for문을 이용해 딕셔너리를 만들었다. 

def solution(park, routes):
    W = len(park[0])
    park = [['X']*(W+2)] + [[*'X'+i+'X'] for i in park] + [['X']*(W+2)]

    x,y = 1,0
    while park[x][y]!='S':
        y += 1
        if y>W:
            x,y = x+1,0

    delta = {k:v for k,v in zip('NEWS',[(-1,0),(0,1),(0,-1),(1,0)])}
    for i in routes:
        v,d = i.split()
        for k in range(1,int(d)+1):
            X,Y = x+k*delta[v][0], y+k*delta[v][1]
            if park[X][Y]=='X':
                break
        else:
            x,y = X,Y
    return [x-1,y-1]

 

+ Recent posts