[알고리즘] 171. Excel Sheet Column Number

프최's log·2020년 12월 10일
0

study

목록 보기
52/59

문제설명

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".

알고리즘

  1. 기본 A~Z와 값은 basicTitle 이라 정의한 객체에 키와 값으로 담는다.
  2. s를 분리하여 forEach로 반복문을 돌린다.
  3. basicTitles의 요소를 넣고, 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;
}
profile
차곡차곡 쌓아가는 나의 개발 기록

0개의 댓글