내 답은 이건데..
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("");
const phoneDic = {
A: 2,
B: 2,
C: 2,
D: 3,
E: 3,
F: 3,
G: 4,
H: 4,
I: 4,
J: 5,
K: 5,
L: 5,
M: 6,
N: 6,
O: 6,
P: 7,
Q: 7,
R: 7,
S: 7,
T: 8,
U: 8,
V: 8,
W: 9,
X: 9,
Y: 9,
Z: 9,
};
const phoneNum = input.map((char) => phoneDic[char]);
let time = 0;
for (let num of phoneNum) {
time += Number(num) - 1 + 2;
}
console.log(time);
민망할 만큼 노가다성으로 푼 것 같아 정답 코드를 참고해서 바꿔 봤다.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("");
const arr = [
2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
];
const a_idx = "A".charCodeAt(0);
console.log(
input.reduce((acc, cur) => {
return (acc += arr[cur.charCodeAt(0) - a_idx] - 1 + 2);
}, 0)
);
깔끔! 해지긴 했는데 메모리랑 걸린 시간은 비슷하다...
코드길이는 두번째가 낫지만 솔직히 가독성은 첫번째가 나은 것 같은데 어떤 게 나은 답인 걸까...
오늘의 수확 : charCodeAt.
주어진 인덱스에 대한 UTF-16 코드를 나타내는 0부터 65535 사이의 정수를 반환한다.
"A".charCodeAt(0)과의 차를 이용해서 알파벳의 특정 순서를 구하고자 할 때 사용할 수 있을 것 같다.