목차
로봇의 이동
이차원 배열 격자판 0행 0열에 로봇이 3시 방향을 보고 있습니다.
로봇은 다음 규칙에 따라 이동합니다.
1. 'G' 명령을 주면 보고 있는 방향으로 한 칸 이동합니다. 격자 밖으로 나가는 명령은 하지 않습니다.
2. 'R' 명령을 주면 오른쪽으로 90도 회전합니다.
3. 'L' 명령을 주면 왼쪽으로 90도 회전합니다.
매개변수 moves에 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지면 이 명령 문자열을 로봇이 모두 수행했을 때 최종 위치를 반환하는 프로그램을 작성하세요.
제한사항:
• moves의 길이는 100을 넘지 않습니다.
• 2차원 배열 격자판의 크기는 100*100입니다. 입력예제 1 설명 :
나의코드
def solution(moves):
x = y = 0
dx=[-1,0,1,0]
dy=[0,1,0,-1]
d=1
for z in moves:
if z=='G':
x=x+dx[d]
y=y+dy[d]
elif z=='R':
d=(d+1)%4
elif z=='L':
d=(d+3)%4
return [x, y]
print(solution('GGGRGGG'))
print(solution('GGRGGG'))
print(solution('GGGGGGGRGGGRGGRGGGLGGG'))
print(solution('GGLLLGLGGG'))
d 방향 벡터를 사용하여 '회전 명령'에 대한 로직으로 d를 조작하였다.
d가 0인경우 왼쪽으로 돌아 -3이 되는 것과 d가 3인경우 오른쪽으로 돌아 다시 0으로 되는 것을 고려하여 %를 사용하였다.
정답 코드
def solution(moves):
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
x = y = 0
d = 1
for c in moves:
if c == 'G':
x = x + dx[d]
y = y + dy[d]
elif c == 'R':
d = (d + 1) % 4
elif c == 'L':
d = (d - 1) % 4
return [x, y]
print(solution('GGGRGGG'))
print(solution('GGRGGG'))
print(solution('GGGGGGGRGGGRGGRGGGLGGG'))
print(solution('GGLLLGLGGG'))
정답코드는 L의 경우 d-1을 사용 하였다.
확인해보니 d-1의 경우에도 d+3과 같은 작동을 하지만 파이썬에서만 자동으로 처리해주는것 같다.
그래도 가독성이나 직관적 이해로 보아 d+3이 훨씬 나은것 같다..!
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[정렬] -사탕 (0) | 2024.01.22 |
---|---|
[시물레이션] -위험지역 (0) | 2024.01.22 |
[시물레이션] -청소로봇 2 (0) | 2024.01.22 |
[시물레이션] -청소로봇 1 (0) | 2024.01.22 |
[시물레이션] -웅덩이 (0) | 2024.01.22 |