https://school.programmers.co.kr/learn/courses/15009/lessons/121687
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
def solution(command):
answer = [0, 0]
dx = [0, 0, -1, 1] # 상하좌우 0 1 2 3
dy = [1, -1, 0, 0]
Rdir = ['U', 'R', 'D', 'L']
Ldir = ['U', 'L', 'D', 'R']
dir = 'U'
Rturn_num = 0
Lturn_num = 0
for c in list(command):
if c == 'R':
Rturn_num = Rdir.index(dir)
Rturn_num += 1
dir = Rdir[Rturn_num%4] # 오른쪽 회전 방향 변경
elif c == 'L':
Lturn_num = Ldir.index(dir)
Lturn_num += 1
dir = Ldir[Lturn_num%4] # 왼쪽 회전 방향 변경
elif c == 'G':
if dir == 'U': # 상
answer[0], answer[1] = answer[0] + dx[0], answer[1] + dy[0]
elif dir == 'D':
answer[0], answer[1] = answer[0] + dx[1], answer[1] + dy[1]
elif dir == 'L':
answer[0], answer[1] = answer[0] + dx[2], answer[1] + dy[2]
else:
answer[0], answer[1] = answer[0] + dx[3], answer[1] + dy[3]
else: # 'B'
if dir == 'U':
answer[0], answer[1] = answer[0] + dx[1], answer[1] + dy[1]
elif dir == 'R':
answer[0], answer[1] = answer[0] + dx[2], answer[1] + dy[2]
elif dir == 'L':
answer[0], answer[1] = answer[0] + dx[3], answer[1] + dy[3]
else:
answer[0], answer[1] = answer[0] + dx[0], answer[1] + dy[0]
return answer
포인트
방향 이동을 시켜줄 때 Rdir, Ldir을 만들어서 현재 방향에서 1을 더해주면 (오른쪽 혹은 왼쪽으로 한 번 회전하면) 해당 방향이 되도록 만들어줬다.
만약 4번 움직이면 제자리에 오기때문에 %4로 나눠서 다시 같은 값이 오게 된다.
방향을 이동시켜주는 부분의 코드가 조금 지저분해서 다른 풀이를 찾아봤다.
고수의 코드
def solution(command):
path = [[0, 1], [1, 0], [0, -1], [-1, 0]] # 상 우 하 좌
x = y = d = 0
for i in command:
if i == 'R':
d = (d+1)%4
elif i == 'L':
d = (d+3)%4
elif i == 'G': # 해당 방향으로 한 칸 이동
x += path[d][0]
y += path[d][1]
elif i == 'B': # 빼주면 상->하 우->좌 반대 방향이 된다
x -= path[d][0]
y -= path[d][1]
return [x, y]
왼쪽으로 회전하는걸 따로 만들어줄 필요가 없다!
더하는게 아니라 빼주면 뒤로 이동이 되기 때문에, 그리고 좌로 이동하는건 3을 더해주면 된다.
코딩하기 전에 규칙을 먼저 찾아보자.
'알고리즘 > 프로그래머스_Python' 카테고리의 다른 글
[Programmers] 해시 - 베스트앨범 (0) | 2023.10.14 |
---|---|
[Programmers] 그리디 - 섬 연결하기 (1) | 2023.10.14 |
[Programmers] PCCP 모의고사#2 3번-카페 확장 (0) | 2023.10.13 |
[Programmers] PCCP 모의고사#2 2번-신입사원 교육 (0) | 2023.10.12 |
[Programmers] PCCP 모의고사#1 3번-유전법칙 (0) | 2023.10.12 |