(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로 만들 수 있다.
  • 문자열 ABAB로 쪼개는 경우 (26 * A) + B가 되고 이는 26 + 2가 되어 28이라는 답을 도출하게 된다.
  • 문자열 ABCA, 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() 메서드를 처음 사용해보았다.