https://programmers.co.kr/learn/courses/30/lessons/12899#
연습문제 중에서도 꽤 난이도가 있는 문제이다.
진수변환의 규칙을 기본적으로 잘 알아야지만이 해당 응용문제를 원활하게 풀 수가 있을 것이다. (알고리즘은 진짜 수학이다 ㅠ)
특히 3진수 변환과 많이 유사한다. 이 부분을 잘 들여다봐 보자
[숫자의 규칙]
10진법 | 124나라 | 3진수 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 4 | 10 |
4 | 11 | 11 |
5 | 12 | 12 |
6 | 14 | 20 |
7 | 21 | 21 |
8 | 22 | 22 |
9 | 24 | 100 |
10 | 41 | 101 |
숫자가 3으로 나누어 떨어질때 3진수는 0으로 처리하지만 124나라는 그런 처리는 없고 4가 되어 버린다.
그래서 3으로 나누어 떨어질때의 값이 124나라와 차이가 있다. 이 부분의 간극을 줄여주면 되는데,
하여 3으로 나누어 떨어질경우에는 0대신 숫자를 4를 넣어주고 나누어진 숫자에서 1을 빼준다.
숫자 10을 예로 들어본다.
- 3진수
10 / 3 = 3 ... 1
3 / 3 = 1 ... 0
1 / 3 = 0 ... 1
결과 -> 101 - 124 나라
10 / 3 = 3 ... 1
3 / 3 = 1 ... 0 -> 4
그리고 1을 -1 = 0
결과 -> 41
Got it?
그럼 바로 작성 코드를 확인해보자.
[작성코드]
class Solution {
public String solution(int n) {
String answer = "";
int num = n;
int chk = 0;
while (num != 0) {
chk = num % 3;
num = num / 3;
if (chk == 0) {
num--;
answer = "4" + answer;
} else if (chk == 1) {
answer = "1" + answer;
} else if (chk == 2) {
answer = "2" + answer;
}
}
return answer;
}
}
/*
도움되라고 적어두는 주석
1 = 1
2 = 2
3 = 4
4 = 11
5 = 12
6 = 14
7 = 21
8 = 22
9 = 24
10 = 41
11 = 42
12 = 44
13 = 111
14 = 112
15 = 114
16 = 121
17 = 122
18 = 124
19 = 141
20 = 142
21 = 144
22 = 211
23 = 212
24 = 214
25 = 221
26 = 222
27 = 224
28 = 241
29 = 242
30 = 244
31 = 411
32 = 412
33 = 414
34 = 421
35 = 422
36 = 424
37 = 441
38 = 442
39 = 444
40 = 1111
*/
수학공부가 더 절실해지는 문제였다..ㅠ 후 그건 그렇고 이제 프로그래머스 기준으로 Java의 level1 문제는 모두 다 풀었다. 그래서 인지 2레벨은 더욱 어렵게 느껴진다 ㅠ 2레벨도 마스터 정복을 해보자! 끝.
[깃허브링크]
'문제풀이 > 프로그래머스' 카테고리의 다른 글
오픈채팅방 / 프로그래머스 연습문제 / programmers / level2 / Java (0) | 2021.08.06 |
---|---|
짝지어 제거하기 / 프로그래머스 연습문제 / programmers / level2 / Java (0) | 2021.08.05 |
콜라츠 추측 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.08.01 |
제일 작은 수 제거하기 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.31 |
예산 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.30 |