2020 카카오 인턴
키패드를 누르는데 규칙에 따라 순차적으로 어떤 손으로 키패드를 누르게 되는지 찾는 문제입니다.
왼쪽 (1, 4, 7)의 경우 왼손의 위치를 변경하고 "L"을 추가합니다.
오른쪽 (3, 6, 9)의 경우 오른손의 위치를 변경하고 "R"을 추가합니다.
가운데 (2, 5, 8, 0)의 경우 왼손과 오른손의 위치에서 거리를 계산합니다.
거리가 같다면 hand 변수에 따라서 왼손 또는 오른손으로 처리해줍니다.
가운데로 이동하였을 경우 해당 손이 가운데 위치하다는 것을 표시하기위해 bool형태의 변수를 사용하였습니다.
가운데일 경우 거리 -1로 계산하게 하였습니다.
function solution(numbers, hand) {
var answer = "";
var keypad = [
["1", "4", "7", "*"],
["2", "5", "8", "0"],
["3", "6", "9", "#"],
];
var nowLeft = 3;
var nowRight = 3;
var left, right;
var leftHandCenter = false;
var rightHandCenter = false;
var j, k;
var find;
for (var i = 0; i < numbers.length; ++i) {
find = false;
for (j = 0; j < 3; ++j) {
for (k = 0; k < 4; ++k) {
if (numbers[i] === keypad[j][k]) {
find = true;
break;
}
}
if (find) {
break;
}
}
if (j === 0) {
leftHandCenter = false;
nowLeft = k;
answer += "L";
} else if (j === 2) {
rightHandCenter = false;
nowRight = k;
answer += "R";
} else {
left = Math.abs(nowLeft - k);
right = Math.abs(nowRight - k);
leftHandCenter ? (left -= 1) : true;
rightHandCenter ? (right -= 1) : true;
if (left < right) {
leftHandCenter = true;
nowLeft = k;
answer += "L";
} else if (left > right) {
rightHandCenter = true;
nowRight = k;
answer += "R";
} else {
if (hand === "left") {
leftHandCenter = true;
nowLeft = k;
answer += "L";
} else {
rightHandCenter = true;
nowRight = k;
answer += "R";
}
}
}
}
return answer;
}
'알고리즘' 카테고리의 다른 글
[C++] 프로그래머스 - 거리두기 확인하기 (0) | 2021.09.14 |
---|---|
[C++] 프로그래머스 - 추석 트래픽 (0) | 2021.09.14 |
[JavaScript] 프로그래머스 - 직업군 추천하기 (0) | 2021.08.28 |
[C++] 11779번 최소비용 구하기 2 (0) | 2021.08.28 |
[C++] 백준 11657번 타임머신 (0) | 2021.08.25 |