https://school.programmers.co.kr/learn/courses/15009/lessons/121687
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
< 풀이 >
function solution(command) {
var answer = [0,0];
let x = [0,1,0,-1];
let y = [1,0,-1,0];
let dir = 0;
for(let i = 0; i < command.length; i++){
if(command[i] == 'G'){
answer[0] += x[dir];
answer[1] += y[dir];
}
else if(command[i] == 'B'){
answer[0] -= x[dir];
answer[1] -= y[dir];
}
else if(command[i] == 'R'){
dir = (dir + 1) % 4; // 방향 전환
}
else {
dir = ((dir - 1) + 4) % 4; // 방향 전환
}
}
return answer;
}
✏️ 풀이 과정
우선 (0,0) 을 기준으로 R일 경우에는 (0,1) -> (1,0) -> (0,-1) -> (-1,0) 으로 회전을 하게 되고, L 일 경우에는 (-1,0) -> (0,-1) -> (1,0) -> (0,1) 으로 회전을 하게 된다.
1. 처음 dir 은 0으로 설정한다.
2.
- 명령어가 'G' 일 경우 : 한 칸 전진이므로 answer 의 x 좌표에는 현재 방향에 해당하는 x좌표를, y좌표에는 현재 방향에 해당하는 y 좌표를 더한다.
- 명령어가 'B' 일 경우: 한 칸 후진이므로 answer 의 x 좌표에는 현재 방향에 해당하는 x 좌표를, y좌표에는 현재 방향에 해당하는 y 좌표를 뺀다.
- 명령어가 'R' 일 경우: 오른쪽으로 회전이므로 (현재 방향+1)%4 를 통해 방향 전환을 한다.
- 명령어가 'L' 일 경우: 왼쪽으로 회전이므로 (현재 방향-1)%4 를 통해 방향 전환을 하는데, 0일 경우에는 음수가 나오므로 이를 방지하기 위해 ((현재 방향-1)+4)%4 를 해주어 음수가 나오는 것을 방지한다.
✍🏻 느낀점
이런 류의 문제를 많이 풀었었는데, 오랜만에 풀다보니 방향 전환을 하는 법에 대해서 잊고 있었다. 그동안에 너무 코딩테스트 문제를 푸는 데 소홀했던 것 같다. 이 문제에서는 왼쪽으로 회전을 할 때 ((dir-1)+4)%4 를 통해 음수가 나오는 걸 방지했는데, 이러한 방법을 잘 기억해뒀다가 다른 문제를 풀 때도 잘 활용해야겠다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JS] 수식 최대화 (0) | 2024.12.30 |
---|---|
[JS] PCCP 기출문제 2번 / 퍼즐 게임 챌린지 (1) | 2024.12.15 |
[JAVA] 숫자 문자열과 영단어 (0) | 2024.06.14 |
[JAVA] 이웃한 칸 (1) | 2024.06.10 |
[JAVA] 숫자 짝꿍 (0) | 2024.06.08 |