Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 알파벳 순서 키보드에서 단어 입력 시간 계산하기

문제 개요

전통적인 QWERTY 자판 배열 대신, 키가 단순히 영어 알파벳 순서(a, b, c, d...)대로 배치된 키보드가 있다고 가정해 보겠습니다.

본격적으로 문제를 풀기 전에 다음 두 가지 조건을 먼저 정리하겠습니다.

  • 현재 손가락은 인덱스 0, 즉 'a' 키 위에 위치해 있습니다.
  • 한 키에서 다른 키로 이동하는 데 걸리는 시간은 두 키 인덱스 차이의 절댓값입니다. 예를 들어 'a'에서 'k'로 이동하는 데 걸리는 시간은 |0 − 10| = 10입니다.

즉, 우리는 영어 소문자 알파벳으로 이루어진 문자열을 입력받아, 해당 문자열을 모두 입력하는 데 필요한 총 시간을 계산해 반환하는 JavaScript 함수를 작성해야 합니다.

입력 및 출력 예시

입력 문자열이 다음과 같다고 가정해 봅시다.

const str = 'dab';

출력

const output = 7;

결과가 7이 되는 이유는 다음과 같은 이동이 순차적으로 발생하기 때문입니다.

'a' -> 'd' = 3
'd' -> 'a' = 3
'a' -> 'b' = 1

각 이동 시간(3 + 3 + 1)을 모두 더하면 총 7이 됩니다.

구현 코드

이 문제를 해결하는 코드는 다음과 같습니다.

const str = 'dab';
const findTimeTaken = (str = '') => {
    let timeSpent = 0;
    const keyboard = 'abcdefghijklmnopqrstuvwxyz';
    let curr = 'a';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        const fromIndex = keyboard.indexOf(curr);
        const toIndex = keyboard.indexOf(el);
        const time = Math.abs(fromIndex - toIndex);
        curr = el;
        timeSpent += time;
    };
    return timeSpent;
};
console.log(findTimeTaken(str));

코드 동작 원리

이 함수의 핵심 로직은 다음과 같습니다.

  • 키보드 참조 문자열 생성: 알파벳 순서 그대로 나열된 문자열을 기준 좌표계로 사용합니다. 각 문자의 인덱스가 곧 키보드상의 위치가 됩니다.
  • 현재 위치 추적: 변수 curr로 현재 손가락이 놓인 키를 저장하며, 처음에는 시작점인 'a'로 초기화합니다.
  • 문자별 이동 시간 누적: 반복문으로 입력 문자열의 각 문자를 순회하면서, 현재 키와 다음 키의 인덱스를 indexOf()로 구한 뒤 그 차이의 절댓값을 계산합니다.
  • 위치 갱신 및 합산: 매 문자를 처리한 후 curr를 해당 문자로 갱신하고, 계산된 시간을 timeSpent에 더합니다.

모든 문자를 처리하면 누적된 timeSpent가 곧 전체 입력에 걸리는 총 시간이므로 이를 반환합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

7

이 알고리즘은 문자열 길이에 비례하여 한 번씩만 순회하므로 시간 복잡도는 O(n)이며, 추가 메모리 사용 없이 효율적으로 동작합니다.