티스토리 뷰

728x90
728x90

문제 설명

Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.

For example:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...
 

Example 1:

Input: columnNumber = 1
Output: "A"
Example 2:

Input: columnNumber = 28
Output: "AB"
Example 3:

Input: columnNumber = 701
Output: "ZY"

 

 

 

나는 처음에 주어진 숫자를 나눠서 리스트에 보관하면서 진행할 예정으로 코드를 짰다.

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

        answer = []

        if columnNumber > 26:
            answer.append(columnNumber%26-1)
            answer.insert(0,columnNumber//26)
            print(answer)
            while True:
                number = answer.pop(0)
                if columnNumber%26 == 0 and number < 28:
                    answer.insert(0,number%26-2)
                    break
                elif number < 27:
                    answer.insert(0,number%26-1)
                    break
                else :
                    answer.insert(0,number%26-1)
                    answer.insert(0,number//26)
            print(answer)
        else:
            answer.append(columnNumber%26-1)
        coo = ''
        for a in answer:
            coo = coo + alpha[a]
        return coo

 

하지만 어디선가 꼬인 코드로 테스트케이스 13번 부터 통과하지 못했다. 테스트케이스를 계속 하나하나 통과하면서 코드를 고치는 것은 올바른 방법이 아니라고 생각해서 틀렸다 생각하고 풀이 중 괜찮은 것 같은 풀이를 봤다.

 

class Solution(object):
    def convertToTitle(self, columnNumber):
        output = ""
        while columnNumber > 0:
            # ord() 함수를 사용해서 A를 유니코드로 변환하고 나머지만큼 더해준다.
            # 그리고 더한 값을 chr() 함수를 이용해서 다시 문자로 반환한다.
            output = chr(ord('A') + (columnNumber - 1) % 26) + output
            # 우리는 A에서 시작을 했기 때문에 1을 빼고 계산해야한다.
            # 1을 빼고 나눈 몫을 다시 columnNumber 에 대입
            columnNumber = (columnNumber - 1) // 26
        return output

 

해당 풀이는 문제의 알파벳을 순서대로 나열하고 순서를 맞추는 것에 중요한 포인트를 두었다.

 

chr 함수와 ord 함수를 사용해서 계산했다.

 

 

ord(문자)

하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환

    예) ord('a')를 넣으면 정수 97을 반환
 

 


chr(정수)

하나의 정수를 인자로 받고 해당 정수에 해당하는 유니코드 문자를 반환
(인자(정수)의 유효 범위는 0 ~ 1,114,111 (16진수 0x10 FFFF)까지 이다)
    예) chr(97)을 하면 문자 'a'를 반환

728x90
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크