- Date : 2021.08.08(일)
- Time : 20분
- Given a string
columnTitlethat represents the column title as appear in an Excel sheet, return its corresponding column number. - For example:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
- 1 <= columnTitle.length <= 7
- columnTitle consists only of uppercase English letters.
- columnTitle is in the range ["A", "FXSHRXW"].
- Input: columnTitle = "ZY"
- Output: 701
def titleToNumber(self, columnTitle: str) -> int:
sum = 0
for i in range(len(columnTitle)):
sum = (sum * 26) + ord(columnTitle[i]) - 64
print(i, sum)
return sum: 이 문제는 만약 알파벳이 두개 이상이라면, 첫번째 알파벳까지의 위치를 먼저 도달한 후 그 다음 알파벳까지 한 단계?(여기서 생각하는 한 단계란 하나의 A~Z의 묶음)를 넘어서 이동해야하는 것이다. 만약에 첫번째 알파벳일 때는 sum = 0 이기 때문에 아무 단계를 거치지 않아도된다. 그래서 문자를 ord를 통해 유니코드 값을 추출한 후에 64를 빼주면 그 값이 나온다. 만약 두번째 알파벳이라면 sum = 1이기 때문에 그 알파벳에 대한 단계를 더해줘야한다. A_ 인 단계는 26개이고 B_인 단계도 26개이다. 그래서 만약 Z_를 구하고싶다면 A_ ~ Y_ 단계를 모두 거치고 와야하기 때문에 *26을 해주는 것이다(이 부분이 이해하는데 좀 걸렸다).