전화번호 키패드 누름 시간 계산

문제


알파벳 대문자로 이루어진 문자열이 주어질 때, 각 문자를 전화번호 키패드에서 누르는데 걸리는 시간을 계산하여  소요 시간을 반환하는 함수를 작성하세요.  번째 숫자를 누르는데 2초가 소요되며,  이후에는 2초씩 증가합니다.각 알파벳에 대해 전화번호 키패드에 해당하는 숫자는 다음과 같습니다

'A', 'B', 'C' → 1번 누름
'D', 'E', 'F' → 2번 누름
'G', 'H', 'I' → 3번 누름
'J', 'K', 'L' → 4번 누름
'M', 'N', 'O' → 5번 누름
'P', 'Q', 'R', 'S' → 6번 누름
'T', 'U', 'V' → 7번 누름
'W', 'X', 'Y', 'Z' → 8번 누름

 

입력


대문자로 공백없이 알파벳이 들어갑니다.

 

예시


const test_case = 'SAZ' // 30

 

풀이

function calculateKeypadPressTime(str) {
    return str
        .split('')
        .map((e) => {
            let code = e.charCodeAt();
            if (e.charCodeAt() >= 83) {
                code--;
                if (e.charCodeAt() == 90) code--;
            }
            return (parseInt((code - 65) / 3) + 1) * 2;
        })
        .reduce(function add(sum, cur) {
            return (sum += cur);
        });
}

각 문자를 아스키코드로 전환 후 S와 Z는 4글자씩 들어갑니다. 그래서 그때부터 한칸씩 더 이동해야되기 때문에 -1를 해줍니다. 

parseInt를 하면 내림을 하기때문에 +1를 해주고 한칸당 2초씩 소요되기 때문에 2를 곱해줍니다.

'코딩문제' 카테고리의 다른 글

다이아몬드 패턴 생성하기  (1) 2024.03.29
초나라 장기 기물 정리하기  (0) 2024.03.28
거꾸로 최댓값 찾기  (0) 2024.03.27
알파벳의 첫 등장 위치 찾기  (0) 2024.03.27
문자열 끝과 처음의 만남  (0) 2024.03.27