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]
'코딩테스트' 카테고리의 다른 글
프로그래머스 코테 155652 둘만의 암호 Lv1 (0) | 2024.06.24 |
---|---|
프로그래머스 외계어 사전 (0) | 2024.06.22 |
프로그래머스 코테 연습 [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.06.21 |
프로그래머스 코딩테스트 연습문제>161989 덧칠하기 (0) | 2024.06.21 |
프로그래머스 코딩테스트> 연습문제>추억 점수 (0) | 2024.06.21 |