문제
알파벳 대문자로 이루어진 문자열이 주어질 때, 각 문자를 전화번호 키패드에서 누르는데 걸리는 시간을 계산하여 총 소요 시간을 반환하는 함수를 작성하세요. 첫 번째 숫자를 누르는데 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 |