Given a column title as appear in an Excel sheet, return its corresponding column number.
- 1 <= s.length <= 7
- s consists only of uppercase English letters.
- s is between "A" and "FXSHRXW".
basicTitle
이라 정의한 객체에 키와 값으로 담는다.s
를 분리하여 forEach로 반복문을 돌린다.basicTitle
에 s
의 요소를 넣고, 26의 arr.length-1-현재요소의 인덱스
승으로 그 합을 구한다.var titleToNumber = function(s) {
let basicTitle = {
A: 1,
B: 2,
C: 3,
D: 4,
E: 5,
F: 6,
G: 7,
H: 8,
I: 9,
J:10,
K:11,
L:12,
M:13,
N:14,
O:15,
P:16,
Q:17,
R:18,
S:19,
T:20,
U:21,
V:22,
W:23,
X:24,
Y:25,
Z:26
}
let result = 0;
s.split('').forEach((ele, idx, arr) =>
result += basicTitle[ele] * (Math.pow(26, arr.length-1-idx))
);
return result;
};
아래 풀이들을 보고 리팩토링
var titleToNumber = function(s){
let result = 0;
for(let i = 0; i < s.length; i++){
let ascii = s.charCodeAt(i)-64;
let power = s.length - i -1;
result += Math.pow(26, power) * ascii;
}
return result;
}
아스키코드를 이용하는 방법이 있다!
charCodeAt : MDN
var titleToNumber = function(s) {
var num = 0, power;
for(var i= 0; i < s.length; i++){
power = s.length - i - 1;
num += Math.pow(26, power) * (s.charCodeAt(i) - 64);
}
return num;
};
더 간단한 방법
var titleToNumber = function(s){
let result = 0;
for(let i = 0; i < s.length; i++){
let ascii = s.charCodeAt(i)-64;
result = (result * 26) + ascii;
}
return result;
}