728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
컴퓨터공학과에서는 실습용 로봇을 이용해서 로봇 프로그래밍을 학습합니다. 실습용 로봇은 입력된 명령에 따라 x좌표와 y좌표로 표현되는 2차원 좌표 평면 위를 이동합니다. 하나의 명령은 하나의 문자로 주어지며 각 명령어에 따라 로봇이 수행하는 일은 다음과 같이 네 종류입니다.
- 'R': 로봇이 오른쪽으로 90도 회전합니다.
- 'L': 로봇이 왼쪽으로 90도 회전합니다.
- 'G': 로봇이 한 칸 전진합니다.
- 'B': 로봇이 한 칸 후진합니다.
명령어는 각각의 명령들이
모인 하나의 문자열로 주어지며, 차례대로 수행됩니다.
로봇은 처음에 (0, 0) 위치에 +y 축을 향하여 놓여 있습니다.
다음 그림은 번호 순서대로 명령어 "GRGLGRG"의 과정을 보여줍니다.








로봇에 입력된 명령어를 순서대로 담고 있는 문자열 command가 주어집니다. 로봇이 주어진 명령어들을 순서대로 모두 수행한 뒤 도착한 최종 위치의 좌푯값 x, y를 순서대로 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ commad의 길이 ≤ 1,000,000
- command는 'R', 'L', 'G', 'B'으로 구성된 문자열입니다.
- command에 들어있는 문자 하나하나가 각 명령을 나타내며, 문자열에 먼저 등장하는 명령을 먼저 수행해야 합니다.
입출력 예
command | result |
"GRGLGRG" | [2, 2] |
"GRGRGRB" | [2, 0] |
Solve
- 단순 구현문제로 명령어에 따라 조건에 맞게 switch~case문을 이용하여 구현하였습니다.
Code
function solution(command) {
const answer = [0, 0];
let direction = 0 // 0 북 1 동 2 남 3 서;
const delta = [[0, 1],[1, 0],[0, -1],[-1, 0]];
for(let i = 0 ; i < command.length; i++) {
const cmd = command[i];
switch(cmd) {
case 'R' : {
direction = (direction+1)%4;
break;
}
case 'L' : {
direction = (direction+3)%4;
break;
}
case 'G' : {
answer[0] += delta[direction][0];
answer[1] += delta[direction][1];
break;
}
case 'B' : {
answer[0] += delta[(direction+2)%4][0];
answer[1] += delta[(direction+2)%4][1];
break;
}
}
}
return answer;
}
'Programmers > JS' 카테고리의 다른 글
[Programmers / JS] Lv.2 혼자서 하는 틱택토 (1) | 2023.04.12 |
---|---|
[Programmers / JS] Lv.3 기지국 설치 (0) | 2023.04.11 |
[Programmers / JS] PCCP 모의고사 #1. 유전법칙 (0) | 2023.04.08 |
[Programmers / JS] PCCP 모의고사 #1. 외톨이 알파벳 (0) | 2023.04.07 |
[Programmers / JS] Lv.3 징검다리 건너기 (0) | 2023.04.06 |