목차
청소 로봇(ver 1)
이차원 배열 격자판 0행 0열이 청소 로봇의 시작위치입니다.
청소 로봇은 다음 규칙에 따라 이동합니다.
1. 'U' 명령은 로봇이 위쪽으로 한 칸 이동합니다.
2. 'R' 명령은 로봇이 오른쪽으로 한 칸 이동합니다.
3. 'L' 명령은 로봇이 왼쪽으로 한 칸 이동합니다.
4. 'D' 명령은 로봇이 아래쪽으로 한 칸 이동합니다.
매개변수 moves에 청소 로봇에 명령을 내린 문자들이 차례대로 나열된 명령 문자열이 주어지 면 이 명령 문자열을 청소 로봇이 모두 수행했을 때 최종 위치를 반환하는 프로그램을 작성하 세요. 격자판 밖으로 벗어나는 명령은 주어지지 않습니다.
제한사항:
• moves의 길이는 100을 넘지 않습니다.
• 2차원 배열 격자판의 크기는 100*100입니다.
나의 코드
def solution(moves):
x = y = 0
for k in moves:
if k=='U':
x=x-1
elif k=='R':
y=y+1
elif k=='D':
x=x+1
elif k=='L':
y=y-1
return [x, y]
print(solution('RRRDDDLU'))
print(solution('DDDRRRDDLL'))
print(solution('RRRRRRDDDDDDUULLL'))
print(solution('RRRRDDDRRDDLLUU'))
간단한 명령어와 제한된 입력만 들어와서 조건에 맞게 시물레이션을 진행하였다.
정답 코드 1
def solution(moves):
x = y = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
for c in moves:
if c == 'U':
x = x + dx[0]
y = y + dy[0]
elif c == 'R':
x = x + dx[1]
y = y + dy[1]
elif c == 'D':
x = x + dx[2]
y = y + dy[2]
elif c == 'L':
x = x + dx[3]
y = y + dy[3]
return [x, y]
정답 코드 2
def solution(moves):
x = y = 0
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
dir = ['U', 'R', 'D', 'L']
for c in moves:
for k in range(4):
if c == dir[k]:
x = x + dx[k]
y = y + dy[k]
return [x, y]
정답코드들은 방향벡터를 사용해서 더 가독성이 좋고 짧게 코드를 작성 하였다.
위 문제처럼 간단한 이동과 제약된 입력인 문제더라도 방향벡터를 사용해서 일반적은 문제에서 모두 적용이 되도록 짜는게 좋을꺼같다.
'코딩테스트[파이썬] > 입문자를 위한 코딩테스트 핵심' 카테고리의 다른 글
[시물레이션] - 로봇의 이동 (0) | 2024.01.22 |
---|---|
[시물레이션] -청소로봇 2 (0) | 2024.01.22 |
[시물레이션] -웅덩이 (0) | 2024.01.22 |
[해시] - 두 수의 합 (0) | 2024.01.22 |
[해시] - 팰린드롬의 길이 (0) | 2024.01.22 |