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'