백준 5622 : 다이얼 nodejs 풀이

김김김·2022년 4월 7일
0

알고리즘 노트

목록 보기
11/16

문제링크..

내 답은 이건데..

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)과의 차를 이용해서 알파벳의 특정 순서를 구하고자 할 때 사용할 수 있을 것 같다.

profile
블로그 이전했습니다. https://sadie100.tistory.com/

0개의 댓글

관련 채용 정보