본문 바로가기

코딩테스트/Programmers

[JS] PCCP 모의고사 #2 1번 - 실습용 로봇

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