728x90

문제설명

입력 & 출력

나의 풀이

 

먼저 풀이 설명에 앞서 문제해석을 하자면 입력으로 N과 B로 주어지는데 N을 10진법으로 변환하는 문제입니다. 그런데 문제 설명을 보면 숫자 10을 넘어가는 진법은 숫자로 표현할 수 없고 A:10, B:11..., Z:35와 같이 변환을 해야 합니다.

 

처음에는 이해가 잘 안 되었는데 그냥 알파벳의 10진수를 새롭게 정의한 것입니다. 원래 문자 A의 10진수는 65, Z의 10진수는 90입니다. 즉 원래 문자의 10진수에서 55를 빼주는 것으로 접근했습니다.


풀이에 대한 설명을 하자면 먼저 입력받아준 N과 B 중에서 밑수가 될 B를 정수형으로 변환하여 base에 저장합니다.

 

왜 뒤집어야 하냐면 왼쪽 그림과 같이 10진법으로 변환하기 위해서는 각 숫자와 자릿수를 곱해줘야 합니다. 이처럼 10진수를 계산하는 방식과 동일하게 2진수, 8진수, 16진수도 동일하게 적용이 됩니다.

 

 (1 * 10^3) + (0 * 10^2) + (2 * 10^1) + (4 * 10^0)  = 1024

 

 

그러면 문제에 적용하면 만약에 입력 NB가 위와 같이 입력된다면 ABCD36진법으로 적용하면 됩니다.

const char = N.split('').reverse()

 

그러나 저는 0부터 시작하는 for문을 사용해 주었기 때문에 위 코드처럼 입력받은 N을 분리하고 reverse() 메서드를 사용하여 뒤집어주지 않으면 (10 * 36^0) + (11 * 36^1) + (12 * 36^2) + (13 * 36^3)와 같이 동작하기 때문에 틀린 답을 얻게 됩니다.

 

다시 풀이에 대한 설명으로 돌아와서 8번 째줄에서 utf 변수에 charCodeAt() 메서드를 사용하여 각 문자의 10진수를 저장해 줍니다.

 

이때 주의 해야 할 점이 있습니다. 바로 입력값이 문자가 아닌 10진법을 넘어지 않는 진법 즉 숫자는 그대로 사용해야 합니다.

 

utf가 65 ~ 90 사이의 값이라면 A~Z라는 의미이기 때문에 앞서 말한 대로 55를 빼주고 Math.pow() 메서드를 사용하여 자릿수의 제곱근을 구해주었습니다. 

 

utf가 65 ~ 90 사이의 값이 아니라면 숫자라는 의미이기 때문에 해당 요소를 정수형으로 변환하고, 똑같이 자릿수의 제곱근을 구해주었습니다.

 

B진법에 맞게 변환한 수를 result에 누적시켜 주고, 최종적으로 합계를 반환하여 마무리해 주었습니다.

 

 

다른 풀이 ✅

parseInt([숫자값], [진법]);

 

파라미터 

  • string
    •  숫자로 변환할 문자열
  • radix
    • optional
    •  string 문자열을 읽을 진법(수의 진법 체계의 진법)
    •  2~36의 수

 

 

위와 같이 parseInt() 함수를 사용하면 다른 진법의 수를 10진수로 바꿔줄 수 있습니다.

 

parseInt() 함수는 parseInt("10")처럼 사용하다 보니깐 문자열을 정수형으로 바꿔주는 함수인 줄 알았는데 option인 radix를 항상 생략해서 단순히 변환만 된 것이었습니다.

 

함수의 사용법을 제대로 확인해야겠다는 생각이 다시 한번 들었습니다..

 

참고 ❗

 

 

[JavaScript] charCodeAt(), fromCharCode() 알아보기

코딩을 하다 보면 문자의 아스키코드(ASCII) or Unicode가 필요할 때가 있습니다. 이때 문자의 아스키코드를 구할 수 있는 charCodeAt()와 fromCharCode()메서드를 알아보고자 합니다. charCodeAt() string.charCodeAt

pixx.tistory.com

 

 

[JavaScript] 문자열 자르기 함수 substr() / substring() / slice() / splice() / split()

자바스크립트에서 문자열, 배열을 자르기 위해서는 substr(), substring(), slice(), splice(), split() 함수를 사용하면 됩니다. 1. substr() "문자열".substr(startIndex, length); //startIndex : 시작위치, length : 길이 substr

pixx.tistory.com