웹 오피스 셀(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, ... 처럼 이어집니다. 숫자를 입력 받으면 그 순서에 대응되는 스프레드시트 컬럼을 출력하는 프로그램을 작성하는 것이 문제입니다.
알파벳은 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));