[Leetcode] 168. Excel Sheet Column Title

Algorithm|2021. 8. 7. 20:24
반응형

Identifying the Problem

주어진 정수에 해당하는 엑셀 상의 열의 위치를 문자로 리턴한다.

 

Constraints:

  • 1 <= columnNumber <= 2^31 - 1
1 -> A
2 -> B
3 -> C ...
26 -> Z
27 -> AA
28 -> AB...

Organizing thoughts

아이디어는 간단하다.

10진수를 알파벳으로 표현하는 26진수 숫자로 바꾸면 된다.

진수를 변환하는 과정은 지난 문제에서 풀었기에 따로 기술하진 않겠다.

 

다만 가장 낮은 자릿수부터 누적시키기 때문에, 끝까지 누적시키고 나서 

배열을 뒤집어야 한다.

 

Sourcecode

char * convertToTitle(int columnNumber){

    

    char* answer = malloc(sizeof(char) * 8); //2^31 - 1 일 때 문자의 길이는 8이다.
    strcpy(answer,"");
    int x;
    char tmp;
    
    while(columnNumber != 0) //진수 변환 과정
    {

        x=columnNumber%26;
        
        if(x==0) x=26;

        tmp = x+'A'-1;
        
        strcat(answer,&tmp);

        if(columnNumber%26==0) columnNumber--;
 
        columnNumber/=26;

    }

    int len = strlen(answer);

    for(int i=0;i<len/2;i++) //뒤집는 과정

    {   

        tmp = answer[i];
        answer[i] = answer[len-1-i]; 
        answer[len-1-i] = tmp;     

    }
    
    return answer;
}

Mistake   

  if(columnNumber%26==0) columnNumber-- 이 부분에서 왜 1을 감소시키는 걸까?

한 예를 들어보자 702는 'ZZ' 이다 

x = 702%26 = 0
x가 0이므로
tmp = z
answer에는 z가 누적
columnNumber/=26 이므로 나머지 27이 된다.
        
x = 27%26 = 1
tmp = z 다음 아스키코드
answer에는 다음 아스키코드가 누적된다.

이처럼 이전의 나머지가 0이었던 경우, 몫에 26이 한번 더 들어가게 되기 때문에 1을 빼줘야 한다.

반응형

'Algorithm' 카테고리의 다른 글

[Leetcode] 143. Reorder List  (0) 2021.08.09
[Leetcode] 169. Majority Element  (0) 2021.08.07
[Leetcode] 155. Min Stack  (0) 2021.08.07
[Leetcode] 141. Linked List Cycle  (0) 2021.08.07
[Leetcode] 136. Single Number  (0) 2021.08.07

댓글()