Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 문장을 모바일 숫자 키패드 시퀀스로 변환하는 방법


개요

이 글에서는 C++를 사용해 문장을 해당하는 모바일 숫자 키패드 시퀀스로 변환하는 프로그램을 살펴봅니다.

알파벳으로 이루어진 문자열이 주어졌을 때, 그 문자열을 실제로 입력하려면 어떤 숫자 키를 몇 번씩 눌러야 하는지를 나타내는 숫자 시퀀스를 출력하는 것이 목표입니다. 예전 버튼식 휴대폰에서 문자 메시지를 작성하던 방식과 동일한 원리입니다.

키패드 매핑 규칙

기존 휴대폰의 숫자 키패드에는 다음과 같이 알파벳이 배정되어 있습니다.

  • 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
  • 0 → 공백(space)

접근 방법

가장 효율적인 방법은 각 알파벳에 대응하는 숫자 시퀀스를 미리 배열에 저장해 두는 것입니다. 그런 다음 입력 문자열을 한 글자씩 순회하면서, 공백이면 "0"을 추가하고 알파벳이면 배열에서 해당 시퀀스를 찾아 결과 문자열에 이어 붙이면 됩니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;

// 숫자 시퀀스를 계산하는 함수
string calc_sequence(string arr[], string input) {
    string output = "";
    // 입력 문자열의 길이
    int n = input.length();
    for (int i = 0; i < n; i++) {
        // 공백인 경우 0 추가
        if (input[i] == ' ')
            output = output + "0";
        else {
            // 'A'를 기준으로 배열 인덱스 계산
            int position = input[i] - 'A';
            output = output + arr[position];
        }
    }
    return output;
}

int main() {
    // 알파벳별 숫자 시퀀스를 배열에 저장
    string str[] = {
        "2", "22", "222",
        "3", "33", "333",
        "4", "44", "444",
        "5", "55", "555",
        "6", "66", "666",
        "7", "77", "777", "7777",
        "8", "88", "888",
        "9", "99", "999", "9999"
    };
    string input = "TUTORIALSPOINT";
    cout << calc_sequence(str, input);
    return 0;
}

출력 결과

8888666777444255577777666444668

코드 동작 원리

  1. calc_sequence 함수는 입력 문자열의 길이만큼 반복하면서 각 문자를 하나씩 검사합니다.
  2. 현재 문자가 공백이면 결과 문자열에 "0"을 추가합니다.
  3. 알파벳인 경우 현재 문자에서 'A'의 아스키 코드 값을 빼면 0부터 시작하는 인덱스가 계산됩니다. 예를 들어 'C'는 'C' - 'A' = 2이므로 배열의 세 번째 요소인 "222"가 선택됩니다.
  4. 선택된 숫자 시퀀스를 결과 문자열에 계속 이어 붙인 후 최종 결과를 반환합니다.

위 예제에서 입력이 "TUTORIALSPOINT"이므로 T(8), U(88), T(8), O(666), R(777)... 순서로 변환되어 최종 출력이 완성됩니다.

시간 복잡도

입력 문자열의 길이를 n이라고 할 때, 각 문자를 한 번씩만 처리하므로 이 알고리즘의 시간 복잡도는 O(n)입니다. 공간 복잡도 역시 결과 문자열을 저장하기 위해 O(n)이 필요합니다.