2023. 9. 14. 17:39ㆍ코딩 테스트 (BOJ)
이 문제는 좀 더 예전에 풀었던 문제인데, 동아리 활동 중 학교 동생에게 문제를 알려주려고 하려보니 기억하는데 꽤나 시간이 걸리는 걸 보고, 역시 기록을 해놔야 겠다 생각이 들어서 지금이라도 쓰게 됐다.
문제해설
우선 B진법이라 하는 것은 곧 한 자리에 들어갈 수 있는 수의 개수가 B개 있다는 뜻이다. 그러니 그 자리에 들어갈 수 있는 수 중 가장 큰 수는 B-1이고, B가 되는 순간 0이 되어 다음 자리로 넘어간다.
Ex) 10진법 -> 가장 큰 수 : 9 ,
2진법 -> 가장 큰 수 : 1,
16진법 -> 가장 큰 수 : F (15)
36진법 -> 가장 큰 수 : Z(35)
그리고 이제 10진법의 만의 자리 수로 예를 들어 숫자의 구조를 살펴보자
98379
당연한 소리지만 만의 자리 수에 있는 9와 1의 자리 수에 있는 9는 다른 숫자이다.
만의 자리(5번째)에 있는 9는 9 ( x 10000)이란 뜻을 포함하고 있기 때문이다.
그리고 이 x 10000의 10000을 한번 더 풀어보자면 10진법에서 다음 숫자로 넘쳐흘러 넘어가는 10이란 숫자의 4제곱이다.
이걸 토대로 98379라는 수를 이제 이렇게 풀어서 써 볼 수 있다.
(9 x 10^4) + (8 x 10^3) + (3 x 10^2) + (7 x 10^1) + (9 x 10^0)
여기까지 왔다면 문제는 다 풀었다. 왜냐하면 이 논리는 모든 10진법 뿐만 아닌 모든 n진법을 관통하기 때문이다.
그 예로 이번엔 문제의 입력 예시인 36진법의 ZZZZZ를 풀어써보자. 문제에서 원하는 답은 10진법이니 10진법으로 표현해서 쓴다.
(35(Z) x 36^4) + (35(Z) x 36^3) + (35(Z) x 36^2) + (35(Z) x 36^1) + (35(Z) x 36^0)
이제 코드로 작성해보자.
전체코드
최근 노마드 코더 니콜라스쌤의 동영상을 시청했는데 어려운 용어, 어려운 설명을 사용할 수록 해당 문제에 이해가 깊지 않은 것이다 라는 영상을 봤다. 그래서 앞으로 포스팅 글들은 초등학생에게 설명해준다는 생각으로 설명해야겠다.
끝
'코딩 테스트 (BOJ)' 카테고리의 다른 글
[백준/BOJ] 1764번 듣보잡 [Javascript / Node js] (0) | 2023.10.06 |
---|---|
[백준/BOJ] 18870번 좌표 압축 (Javascript/ Node js) (0) | 2023.10.04 |
[백준/BOJ] 24313번 알고리즘 수업 - 점근적 표기 1 (Node js/ Javascript) (0) | 2023.09.12 |
[백준/BOJ] 24266번 알고리즘 수업 - 알고리즘의 수행 시간 5 (Javascript / Node js) (0) | 2023.09.09 |
[백준/BOJ] 14215번 세 막대 [Javascript / Node js] (2) | 2023.09.06 |