(LeetCode) 171. Excel Sheet Column Number
171. Excel Sheet Column Number
- Explore : Interview > Top Interveiw Questions > Medium Collection
- 분류 : Math
- 난이도 : Easy
Problem
Given a string columnTitle
that represents the column title as appear in an Excel sheet, return its corresponding column number.
For example:
1 2 3 4 5 6 7 8
| A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
|
Example 1
1 2
| Input: columnTitle = "A" Output: 1
|
Example 2
1 2
| Input: columnTitle = "AB" Output: 28
|
Example 3
1 2
| Input: columnTitle = "ZY" Output: 701
|
Example 4
1 2
| Input: columnTitle = "FXSHRXW" Output: 2147483647
|
Constraints
1 <= columnTitle.length <= 7
columnTitle
consists only of uppercase English letters.
columnTitle
is in the range ["A", "FXSHRXW"]
.
Solution
Exapnder
1 2 3
| class Solution { fun titleToNumber(columnTitle: String): Int = columnTitle.toCharArray().fold(0) { result, next -> result * 26 + next.toInt() - 64 } }
|
Point of Thinking
- 수학 관련 문제이기때문에 이 또한 규칙성을 찾을 수 있다.
- 문자
A
는 Int로 변환시 65가 되므로 64를 빼서 1로 만들 수 있다.
- 문자열
AB
는 A
와 B
로 쪼개는 경우 (26 * A) + B
가 되고 이는 26 + 2가 되어 28이라는 답을 도출하게 된다.
- 문자열
ABC
는 A
, B
, C
로 쪼개는 경우 (26 * 26 * A) + (26 * B) + C
가 된다.
- 이를 26으로 묶으면
((26 * A) + B) * 26 + C
가 되고, ((26 * 1) + 2) * 26 + 3이 되어 731이라는 답을 도출하게 된다.
- 위의 규칙성을 확인한 뒤 코드를 작성하면 된다.
- 주어진 문자열을 charArray로 변환한 후, 기존 값에 26을 곱하고 해당하는 문자의 값에서 64를 빼고 더해주면 Accepted.
- 원래 루프로 풀었었는데, 이번 문제에서
fold()
메서드를 처음 사용해보았다.