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

C++에서 엑셀 열 번호를 열 문자(A, B, C…)로 변환하는 방법


엑셀 열 문자의 규칙

엑셀의 열 이름은 알파벳으로 구성됩니다. A부터 시작하여 Z까지 진행된 후, 다시 AA, AB 순으로 이어지며 ZZ에 도달하면 그다음은 AAA, AAB처럼 계속 확장됩니다. 즉, 1번 열은 A, 26번 열은 Z, 27번 열은 AA에 해당합니다. 이번 글에서는 열 번호가 주어졌을 때 해당하는 열 문자를 구하는 방법을 알아보겠습니다. 예를 들어 열 번호가 80이라면 결과는 CB가 됩니다.

변환 알고리즘의 핵심 원리

이 문제는 사실상 10진수를 26진법 형태의 문자로 바꾸는 과정과 유사합니다. 숫자 n이 주어지면 먼저 n을 26으로 나눈 나머지를 구합니다.

  • 나머지가 0인 경우: 해당 자리는 Z입니다. 이때 n은 n/26 - 1로 갱신합니다.
  • 나머지가 0이 아닌 경우: (나머지 - 1)에 'A'를 더한 문자를 결과 문자열에 추가하고, n은 n/26으로 갱신합니다.

이 과정을 n이 0이 될 때까지 반복한 뒤, 마지막으로 문자열을 뒤집어 출력하면 원하는 열 문자를 얻을 수 있습니다. 낮은 자리부터 문자가 채워지기 때문에 역순으로 저장되기 때문입니다.

C++ 예제 코드

#include<iostream>
#include<algorithm>
using namespace std;
void showColumnLetters(int n) {
    string str = "";
    while (n) {
        int rem = n%26;
        if (rem==0) {
            str += 'Z';
            n = (n/26)-1;
        }
        else{
            str += (rem-1) + 'A';
            n = n/26;
        }
    }
    reverse(str.begin(), str.begin() + str.length());
    cout << str << endl;
}
int main() {
    int n = 700;
    cout << "Cell name of " << n << " is: ";
    showColumnLetters(700);
}

실행 결과

Cell name of 700 is: ZX

동작 과정 상세 분석 (n = 700)

위 코드가 어떻게 동작하는지 n = 700을 예로 단계별로 살펴보겠습니다.

  1. 첫 번째 반복: 700 % 26 = 24이므로 (24 - 1) + 'A' = 'X'를 문자열에 추가합니다. n은 700 / 26 = 26으로 갱신됩니다.
  2. 두 번째 반복: 26 % 26 = 0이므로 'Z'를 문자열에 추가합니다. n은 26 / 26 - 1 = 0으로 갱신됩니다.
  3. 종료: n이 0이므로 반복이 끝납니다. 지금까지 만들어진 문자열은 "XZ"이고, 이를 뒤집으면 최종 결과 "ZX"가 됩니다.

이 알고리즘의 시간 복잡도는 26진법 자릿수에 비례하므로 O(log₂₆ n)이며, 매우 효율적으로 동작합니다. 엑셀 스프레드시트를 다루는 프로그램에서 셀 주소를 생성할 때 유용하게 활용할 수 있습니다.