본문 바로가기
ALGORITHM/백준 With Node.js

[백준] 1152번 / 단어의 개수 / Node.js

by LAY CODER 2021. 4. 26.

문제

 

5622번: 다이얼

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

www.acmicpc.net

 


 

CODE

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

rl.on('line', function (line) {
    // 입력 받은 문자를 나눔
    const alphabets = line.split('');

    // dial object 생성
    const dial = {
        2: ['A', 'B', 'C'],
        3: ['D', 'E', 'F'],
        4: ['G', 'H', 'I'],
        5: ['J', 'K', 'L'],
        6: ['M', 'N', 'O'],
        7: ['P', 'Q', 'R', 'S'],
        8: ['T', 'U', 'V'],
        9: ['W', 'X', 'Y', 'Z'],
    };

    // 모든 숫자는 걸기 위해서 1초씩 더 걸리기에 미리 알파벳 길이로 초기화
    let minTime = alphabets.length;

    for (let i = 0; i < alphabets.length; i++) {
        for (number in dial) {
            // 해당 key의 value가 알파벳을 포함하고 있으면 key의 number 값을 minTime에 더해준다.
            if (dial[number].includes(alphabets[i])) {
                minTime += +number;
            }
        }
    }

    console.log(minTime);

    // ============================ 풀이 2 ===============================

    // 모든 숫자는 걸기 위해서 1초씩 더 걸린다.
    let minTime = alphabets.length;

    for (let i = 0; i < alphabets.length; i++) {
        const ascii = alphabets[i].charCodeAt();

        if (ascii <= 'C'.charCodeAt()) {
            minTime += 2;
        } else if (ascii <= 'F'.charCodeAt()) {
            minTime += 3;
        } else if (ascii <= 'I'.charCodeAt()) {
            minTime += 4;
        } else if (ascii <= 'L'.charCodeAt()) {
            minTime += 5;
        } else if (ascii <= 'O'.charCodeAt()) {
            minTime += 6;
        } else if (ascii <= 'S'.charCodeAt()) {
            minTime += 7;
        } else if (ascii <= 'V'.charCodeAt()) {
            minTime += 8;
        } else if (ascii <= 'Z'.charCodeAt()) {
            minTime += 9;
        }
    }

    // console.log(minTime);

    rl.close();
}).on('close', function () {
    process.exit();
});

 

처음 사용한 풀이는 최소시간을

 

입력받은 알파벳의 길이(모든 숫자는 걸기위해 1초씩 더 걸리기 때문)로 초기화 하고

 

String.charCodeAt() 을 이용하여 해당 알파벳의 아스키코드보다 작은 경우

 

다이얼의 숫자를 최소시간에 더하는 방식을 사용했다.

 

 

그러다 object의 key value를 이용하면 더 짧게 표현할 수 있을 거 같아 바꿔 보았다.

 

 

입력받은 알파벳을 dial object의 각 value가 포함하고 있는지

 

Array.includes() 를 이용하여 확인하고

 

포함할 경우 최소시간에 해당 key 값을 number로 변환하여 더해주는 방식이다.

댓글