memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에 있습니다

문제

 

풀이

전체 코드

const solution = (input) => {
    const dial = [...Array(26).keys()].reduce((acc, i) => {
        const n = 65 + i;
        const c = String.fromCharCode(n);
        if (n < 68) acc[c] = 2;
        else if (n < 71) acc[c] = 3;
        else if (n < 74) acc[c] = 4;
        else if (n < 77) acc[c] = 5;
        else if (n < 80) acc[c] = 6;
        else if (n < 84) acc[c] = 7;
        else if (n < 87) acc[c] = 8;
        else if (n < 91) acc[c] = 9;
        return acc;
    }, {});
    return input
        .split('')
        .map((s) => dial[s] + 1)
        .reduce((acc, n) => acc + n, 0);
};

require('readline')
    .createInterface(process.stdin, process.stdout)
    .on('line', (input) => console.log(solution(input)))
    .on('close', () => process.exit(0));

 

상세 풀이

영문자가 다이얼 몇번인지 알기 위해 dial 이란 Map을 생성했다. 그리고, 각 다이얼까지 얼마나 시간이 소요되는지 value 값에 소요시간을 담았다. 예를들어, 아래와 같다.

{
    A: 2, B: 2, C: 2,
    D: 3, E: 3, F: 3,
    // ...
}

 

입력값을 한 단어로 나눈뒤에, 위에서 생성한 map에서 소요시간을 가지고 와서 합을 구했다. 문제가 길어서 그렇지 어려운 문제는 아니었다.

return input
    .split('')
    .map((s) => dial[s] + 1)
    .reduce((acc, n) => acc + n, 0);

 

 

전체 코드

https://github.com/bluemiv/Algorithm/blob/master/baekjoon/nodejs/src/ex05/ex5622.js

 

GitHub - bluemiv/Algorithm: 알고리즘 풀이

알고리즘 풀이. Contribute to bluemiv/Algorithm development by creating an account on GitHub.

github.com

 

풀이 결과

문제 풀이 결과

 

관련 글

2022.07.21 - [Algorithm/Beakjoon] - jest 단위테스트를 이용하여 백준 알고리즘 문제 편하게 풀기

 

jest 단위테스트를 이용하여 백준 알고리즘 문제 편하게 풀기

쉬운 문제는 웹 사이트에서 풀어도 되지만, 복잡한 문제는 여러 경우의 케이스에 대해서 실행해보는 경우가 생긴다. 백준에서는 다른 알고리즘 문제 사이트와 다르게 웹에서 실행해볼수가 없어

memostack.tistory.com

 

 

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.tistory.com/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!