[백준] 2745 진법 변환 -nodejs

야생피카츄·2023년 9월 7일

🎃어떻게 풀었나

숫자를 특정한 진법으로 변환해주는 문제입니다. input_num에 바꿀 숫자, input_jin이 바꿀 진법입니다.
알파벳으로 들어오는 경우엔 charCodeAt()이라는 함수로 아스키코드 값을 통해 계산했습니다.
오늘은 빨리 풀고 코드도 괜찮은것 같아서 자신있게 chatGPT에게 풀어보라고 했습니다.

const isNumeric = n => !!Number(n) || n === "0";

var input_num = input.split(' ')[0];
var input_jin = parseInt(input.split(' ')[1]);
var num_arr = [];
var answer = 0;

for (var i = 0; i < input_num.length; ++i){
    var num = input_num.charAt(i);
    var real_num;
    if (isNumeric(num)) {
        real_num = parseInt(num);
    }
    else {
        real_num = num.charCodeAt() - 55;
    }
    answer += real_num * (input_jin ** (input_num.length-i-1));
}


console.log(answer);

🛸chatGPT가 내놓은 코드

아직 모르는 javascript문법들이 좀 쓰이긴 했지만 char단위로 변환 함수를 만들어서 풀었군요. 예제도 제대로 나오고 제가 보기에도 틀린 곳은 없어보이는데 제출하면 틀렸다고 나오긴 하네요.
가끔 vs에선 되고 채점에선 틀린다던데 그 경우이지 않나 싶습니다.
char.charCodeAt() - 'A'.charCodeAt() + 10 이부분을 생각 못한게 아쉽네요.
A의 값을 그냥 빼면 되는거였는데 저는 굳이 55를 뺏네요.

const input_num = input[0];
const base = parseInt(input[1]);

const convertCharToDecimalValue = char => {
    if ('0' <= char && char <= '9') {
        return parseInt(char);
    }
    return char.charCodeAt() - 'A'.charCodeAt() + 10;
};

const answer = [...input_num].reverse().reduce((acc, char, idx) => {
    return acc + convertCharToDecimalValue(char) * (base ** idx);
}, 0);

console.log(answer);
profile
각성개발자

0개의 댓글