부부의 코딩 성장 일기

LeetCode 171(Excel Sheet Column Number, Python) 본문

Algorithm/LeetCode

LeetCode 171(Excel Sheet Column Number, Python)

제로_콜라 2023. 12. 6. 19:00

1. 문제 링크

 

Excel Sheet Column Number - LeetCode

Can you solve this real interview question? Excel Sheet Column Number - Given a string columnTitle that represents the column title as appears in an Excel sheet, return its corresponding column number. For example: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27

leetcode.com

2. 문제 설명

  • A이 주어지면 1, Z이 주어지면 26을 반환
  • AA이 주어지면 27, AB이 주어지면 28 와 같은 규칙으로 수가 주어졌을 때 문자열을 반환
  • 즉, 엑셀의 열이름이 주어졌을 때 몇 번째 열인지를 생각하면 되고 A부터 Z까지 26개이니 26진법으로 생각
  • 26진법이면 26으로 나눈 나머지가 0부터 25까지 나옴
  • 그런데 A~Z까지 0을 나타내는 수가 없다는 것에 유의, 즉 0이 아니라 1이 A가 되고 26이 Z가 되어 1부터 26까지 나와서 하나의 차이가 존재한다.

3. 처음 풀이

class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        result = 0 
        for i in columnTitle:
            num = ord(i)-64 #ord('A')=65, ord('Z')=90이다. 64를 빼면 A는 1, Z는 26에 해당
            result = 26*result + num #이전 결과를 26배 하면 한 칸 더 높은 자릿수를 나타냄. 즉 ABC에서 A는 1*26²을, B는 2*26, C는 3을 나타냄 
        return result

4. 다른 풀이

  • 26배씩 하면서 더하지 말고 바로 거듭제곱 연산 **을 써도 된다.
class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        num = 0
        columnTitle = columnTitle[::-1]
        for i in range(len(columnTitle)):
            num += (ord(columnTitle[i])-64)*pow(26,i)
        return num

5. 배운 점

  • 문자를 받고 해당하는 유니코드를 반환하는 ord 함수와 유니코드를 받고 해당하는 문자를 반환하는 chr 함수
ord('A') #65
ord('B') #66

chr(65) #'A'