(알고리즘) CNP : 액셀 및 스프레드시트 컬럼의 영문명칭 계산?

호두파파·2022년 2월 4일
0

알고리즘 연습

목록 보기
57/60


웹 오피스 셀(Cell)이나 마이크로소프트 엑셀(Excel)과 같은 스프레드시트 프로그램은 행(row, 1,048,576행)는 숫자, 열(column, 16,384열)을 표시하기 위해 알파벳 대문자를 사용합니다. 예를 들면 1열=A, 2열=B, 26열=Z 와 같이 표시되고, 26열이 넘어가면 앞쪽에 문자 하나를 추가해서 27열=AA, 28열=AB, 52열=AZ, 53열=BA가 되며, 동일한 원리로 ZZ의 다음 열은 AAA, AAB, ... 처럼 이어집니다. 숫자를 입력 받으면 그 순서에 대응되는 스프레드시트 컬럼을 출력하는 프로그램을 작성하는 것이 문제입니다.

입력 숫자 목록

  • [10000, 55, 37, 20, 415, 1, 35, 100, 2021, 212104]
  • 10,000,000

알파벳은 26개의 문자로 이루어져있다. 26개를 기준으로 배열의 숫자를 나눈 몫 + 1 만큼, 알파벳이 더해진다. 그리고 나머지값은 알파벳 상수 배열에 담긴 알파벳의 인덱스 값이 될 수 있다.

이를 코드로 구현하면 다음과 같다.

const arr = [10000, 55, 37, 20, 415, 1, 35, 100, 2021, 202104];

const name = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

function solution(arr) {
  arr.map((item) => {
    let acc='';
    const rest = (item % 26) - 1;
    const quotient = Math.floor(item / 26);
    if (quotient >= 1) {
      for(let i = 0; i <= quotient; i++) {
        acc += name[rest];
      }
    } else {
      acc = name[rest];
    }
   console.log(`item은 ${item}`,`컬럼은 ${acc}`);
  });
}

console.log(solution(arr));


profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글