๐ ๋ฌธ์
์ค๋งํธํฐ ์ ํ ํคํจ๋์ ๊ฐ ์นธ์ ๋ค์๊ณผ ๊ฐ์ด ์ซ์๋ค์ด ์ ํ ์์ต๋๋ค.
์ด ์ ํ ํคํจ๋์์ ์ผ์๊ณผ ์ค๋ฅธ์์ ์์ง์๊ฐ๋ฝ๋ง์ ์ด์ฉํด์ ์ซ์๋ง์ ์
๋ ฅํ๋ ค๊ณ ํฉ๋๋ค.
๋งจ ์ฒ์ ์ผ์ ์์ง์๊ฐ๋ฝ์ * ํคํจ๋์ ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ์ # ํคํจ๋ ์์น์์ ์์ํ๋ฉฐ, ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํ๋ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ง์๊ฐ๋ฝ์ ์ํ์ข์ฐ 4๊ฐ์ง ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ ํคํจ๋ ์ด๋ ํ ์นธ์ ๊ฑฐ๋ฆฌ๋ก 1์ ํด๋นํฉ๋๋ค.
์ผ์ชฝ ์ด์ 3๊ฐ์ ์ซ์ 1, 4, 7์ ์
๋ ฅํ ๋๋ ์ผ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํฉ๋๋ค.
์ค๋ฅธ์ชฝ ์ด์ 3๊ฐ์ ์ซ์ 3, 6, 9๋ฅผ ์
๋ ฅํ ๋๋ ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ด๋ฐ ์ด์ 4๊ฐ์ ์ซ์ 2, 5, 8, 0์ ์
๋ ฅํ ๋๋ ๋ ์์ง์๊ฐ๋ฝ์ ํ์ฌ ํคํจ๋์ ์์น์์ ๋ ๊ฐ๊น์ด ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํฉ๋๋ค.
4-1. ๋ง์ฝ ๋ ์์ง์๊ฐ๋ฝ์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๋ค๋ฉด, ์ค๋ฅธ์์ก์ด๋ ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ, ์ผ์์ก์ด๋ ์ผ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํฉ๋๋ค.
์์๋๋ก ๋๋ฅผ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers, ์ผ์์ก์ด์ธ์ง ์ค๋ฅธ์์ก์ด์ธ ์ง๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด hand๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ๋ฒํธ๋ฅผ ๋๋ฅธ ์์ง์๊ฐ๋ฝ์ด ์ผ์์ธ ์ง ์ค๋ฅธ์์ธ ์ง๋ฅผ ๋ํ๋ด๋ ์ฐ์๋ ๋ฌธ์์ด ํํ๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๐ ์ ํ์ฌํญ
- numbers ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- numbers ๋ฐฐ์ด ์์์ ๊ฐ์ 0 ์ด์ 9 ์ดํ์ธ ์ ์์ ๋๋ค.
- hand๋ "left" ๋๋ "right" ์ ๋๋ค.
- "left"๋ ์ผ์์ก์ด, "right"๋ ์ค๋ฅธ์์ก์ด๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ผ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ L, ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ์ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ R์ ์์๋๋ก ์ด์ด๋ถ์ฌ ๋ฌธ์์ด ํํ๋ก return ํด์ฃผ์ธ์.
๐ ์ ์ถ๋ ฅ ์
numbers hand result
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL"
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR"
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"
๐ ์ ์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์์๋๋ก ๋๋ฌ์ผ ํ ๋ฒํธ๊ฐ [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]์ด๊ณ , ์ค๋ฅธ์์ก์ด์
๋๋ค.
์ผ์ ์์น ์ค๋ฅธ์ ์์น ๋๋ฌ์ผ ํ ์ซ์ ์ฌ์ฉํ ์ ์ค๋ช
* # 1 L 1์ ์ผ์์ผ๋ก ๋๋ฆ
๋๋ค.
1 # 3 R 3์ ์ค๋ฅธ์์ผ๋ก ๋๋ฆ
๋๋ค.
1 3 4 L 4๋ ์ผ์์ผ๋ก ๋๋ฆ
๋๋ค.
4 3 5 L ์ผ์ ๊ฑฐ๋ฆฌ๋ 1, ์ค๋ฅธ์ ๊ฑฐ๋ฆฌ๋ 2์ด๋ฏ๋ก ์ผ์์ผ๋ก 5๋ฅผ ๋๋ฆ
๋๋ค.
5 3 8 L ์ผ์ ๊ฑฐ๋ฆฌ๋ 1, ์ค๋ฅธ์ ๊ฑฐ๋ฆฌ๋ 3์ด๋ฏ๋ก ์ผ์์ผ๋ก 8์ ๋๋ฆ
๋๋ค.
8 3 2 R ์ผ์ ๊ฑฐ๋ฆฌ๋ 2, ์ค๋ฅธ์ ๊ฑฐ๋ฆฌ๋ 1์ด๋ฏ๋ก ์ค๋ฅธ์์ผ๋ก 2๋ฅผ ๋๋ฆ
๋๋ค.
8 2 1 L 1์ ์ผ์์ผ๋ก ๋๋ฆ
๋๋ค.
1 2 4 L 4๋ ์ผ์์ผ๋ก ๋๋ฆ
๋๋ค.
4 2 5 R ์ผ์ ๊ฑฐ๋ฆฌ์ ์ค๋ฅธ์ ๊ฑฐ๋ฆฌ๊ฐ 1๋ก ๊ฐ์ผ๋ฏ๋ก, ์ค๋ฅธ์์ผ๋ก 5๋ฅผ ๋๋ฆ
๋๋ค.
4 5 9 R 9๋ ์ค๋ฅธ์์ผ๋ก ๋๋ฆ
๋๋ค.
4 9 5 L ์ผ์ ๊ฑฐ๋ฆฌ๋ 1, ์ค๋ฅธ์ ๊ฑฐ๋ฆฌ๋ 2์ด๋ฏ๋ก ์ผ์์ผ๋ก 5๋ฅผ ๋๋ฆ
๋๋ค.
5 9 - -
๋ฐ๋ผ์ "LRLLLRLLRRL"๋ฅผ return ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #2
์ผ์์ก์ด๊ฐ [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]๋ฅผ ์์๋๋ก ๋๋ฅด๋ฉด ์ฌ์ฉํ ์์ "LRLLRRLLLRR"์ด ๋ฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
์ค๋ฅธ์์ก์ด๊ฐ [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]๋ฅผ ์์๋๋ก ๋๋ฅด๋ฉด ์ฌ์ฉํ ์์ "LLRLLRLLRL"์ด ๋ฉ๋๋ค.
๐ง ํ์ด
function solution(numbers, hand) {
let keyPad = {1: ["L", 0, 0], 4: ["L", 1, 0], 7: ["L", 2, 0], 3: ["R", 0, 2], 6: ["R", 1, 2], 9: ["R", 2, 2]};
let level = {2: [0, 1], 5: [1, 1], 8: [2, 1], 0: [3, 1]};
let presentL = [3, 0];
let presentR = [3, 2];
let answer = [];
numbers.forEach((e) => {
if (keyPad[e] != undefined) {
answer.push(keyPad[e][0]);
if (keyPad[e][0] === "L") {
presentL = [keyPad[e][1], keyPad[e][2]];
} else {
presentR = [keyPad[e][1], keyPad[e][2]];
}
} else {
let target = level[e];
let leftDistance = Math.abs(target[0] - presentL[0]) + Math.abs(target[1] - presentL[1]);
let rightDistance = Math.abs(target[0] - presentR[0]) + Math.abs(target[1] - presentR[1]);
let nearHand = leftDistance < rightDistance ? "L" : leftDistance > rightDistance ? "R" : hand === "right" ? "R" : "L";
answer.push(nearHand);
if (nearHand === "R") {
presentR = target;
} else {
presentL = target;
}
}
});
return answer.join("");
}
๐ก ์๊ฒ ๋ ์
- [x1, y1] - [x2, y2]์ ์ ๋๊ฐ์ผ๋ก 2์ฐจ์ ๋ฐฐ์ด์ ์์ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค.
- ์ ๋๊ฐ์ ๊ตฌํ๋ ํจ์๋ Math.abs(n)์ผ๋ก, Math ํจ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ๋์ด ์๋ค.
- ์ผํญ์ฐ์ฐ์๋ ์ค์ฒฉ ๊ฐ๋ฅํ๋ค