Javascript/코딩테스트-연습
[JavaScript] 캐릭터의 좌표 - 프로그래머스
BeomBe
2024. 4. 8. 21:36
반응형
문제 설명
자세한 문제 설명은 아래 링크 참조해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/120861
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
가능한 짧게 만들어보고 싶었다.
function solution(keyinput, board) {
let answer = [0,0];
for (let p of keyinput) {
switch(p){
case 'left': if (-answer[0] < board[0]/2-1) answer[0]--; break;
case 'right': if (answer[0] < board[0]/2-1) answer[0]++; break;
case 'up': if (answer[1] < board[1]/2-1) answer[1]++; break;
case 'down': if (-answer[1] < board[1]/2-1) answer[1]--; break;
}
}
return answer;
}
다른사람들의 풀이
function solution(keyinput, board) {
var answer = [0, 0];
const bndrX = (board[0] - 1) / 2;
const bndrY = (board[1] - 1) / 2;
keyinput.forEach(cmd => {
switch(cmd) {
case 'up': {
if(answer[1] !== bndrY) answer[1]++;
break;
}
case 'down': {
if(answer[1] !== -bndrY) answer[1]--;
break;
}
case 'left': {
if(answer[0] !== -bndrX) answer[0]--;
break;
}
case 'right': {
if(answer[0] !== bndrX) answer[0]++;
break;
}
}
});
return answer;
}
다른 풀이들도 눈에 들어오지만, 아래 풀이가 그냥 직관적으로 눈에 들어와 가져왔다.
function solution(keyinput, board) {
var answer = [];
let x = 0;
let y = 0;
for(let i=0; i<keyinput.length; i++){
if(keyinput[i] == "right" & x+1 <= (board[0]-1)/2){
x += 1
}
if(keyinput[i] == "left" & x-1 >= -((board[0]-1)/2)){
x -= 1
}
if(keyinput[i] == "up" & y+1 <= (board[1]-1)/2){
y += 1
}
if(keyinput[i] == "down" & y-1 >= -((board[1]-1)/2)){
y -= 1
}
}
answer.push(x,y)
return answer;
}
다양한 방식으로 짤 수 있지만, 나는 상대적으로 최대한 기본 코드를 활용하는것을 좀 더 좋아하다보니, 마지막 풀이법이 좋아보인다...
반응형