Algorithm_javascript/5. 문자열

백준 5622번 다이얼 (javascript, node.js)

luminouswy 2023. 5. 20. 17:44
반응형

문제

  • 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
  • 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
  • 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
  • 상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
  • 할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.

입력

  • 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

출력

  • 첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.

예제입력 1

WA

예제출력 1

13

예제입력 2

UNUCIC

예제출력 2

36


문제풀이

  • 입력 값에 해당하는 알파벳을 찾아서 그에 맞는 숫자를 모두 더해서 출력
  1. 알파벳과 숫자 쌍을 객체로 만들어서 담아둠
  2. 해당 객체에 맞는 알파벳을 찾기
  3. 알파벳에 해당하는 숫자를 모두 더 하여 출력
  • for in 을 사용하여 해당하는 키에 맞는 속성값을 출력하고
  • includes() 함수를 사용하여 입력값이 있는지 확인
//5622번
//다이얼

//dial[i] == 다이얼 숫자 1을 걸려면 2초 ~ 그다음부터 1초씩증가 숫자는 (1,2,3,4,5,6,7,8,9,0) 순서
// 문자는 각해당하는 숫자번호로 눌러야됨  1,2(abc),3(def),4(ghi),5(jkl),6(mno),7(pqrs),8(tuv),9(wxyz),0
// 문자에 해당하는 숫자로 전화를 걸경우 최소시간 구하기

//1. 알파벳과 숫자 쌍을 객체로 만들기
//2. 해당 객체에서 문자 검색
//3. 키값을 출력하여 더하기
// for...in  문을 통하여 객체 문자열 반복, inlcudes()함수를 통하여 입력 값이 있는지 확인

const fs = require("fs");
const file = process.platform === "linux" ? "dev/stdin" : "./text.txt";
const input = fs.readFileSync(file).toString().trim().split("");

const number = {
  ABC: 3,
  DEF: 4,
  GHI: 5,
  JKL: 6,
  MNO: 7,
  PQRS: 8,
  TUV: 9,
  WXYZ: 10,
};
const dial = input;

let sum = 0;

for (i = 0; i < dial.length; i++) {
  for (let x in number) {
    if (x.includes(dial[i])) {
      sum += number[x];
    }
  }
}

// 몰랐을때 그냥 풀었던 무식한 방법
// for (i= 0; i < dial.length; i++){
//     let str = dial[i];
//     if(str == 'A' || str == 'B' || str == 'C'){
//         sum += 3;
//     }else if(str == 'D' || str == 'E' || str == 'F' ){
//         sum += 4;
//     }else if(str == 'G' || str == 'H' || str == 'I' ){
//         sum += 5;
//     }else if(str == 'J' || str == 'K' || str == 'L' ){
//         sum += 6;
//     }else if(str == 'M' || str == 'N' || str =='O' ){
//         sum += 7;
//     }else if(str == 'P' || str == 'Q' || str == 'R' || str == 'S' ){
//         sum += 8;
//     }else if(str == 'T' || str == 'U' || str == 'V' ){
//         sum += 9;
//     }else if(str == 'W' || str == 'X' || str == 'Y' || str == 'Z' ){
//         sum += 10 ;
//     }

// }

console.log(sum);