본문 바로가기
문제풀이/프로그래머스

124 나라의 숫자 / 프로그래머스 연습문제 / programmers / level2 / Java

by RUCKUS 2021. 8. 3.

https://programmers.co.kr/learn/courses/30/lessons/12899#

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr


연습문제 중에서도 꽤 난이도가 있는 문제이다.

진수변환의 규칙을 기본적으로 잘 알아야지만이 해당 응용문제를 원활하게 풀 수가 있을 것이다. (알고리즘은 진짜 수학이다 ㅠ)

 

특히 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레벨도 마스터 정복을 해보자! 끝.

 


[깃허브링크]

https://github.com/RUCKUSJERRY/practiceOfAlgorithm/blob/main/Prs_Pratice/src/com/level01/WorldOf124.java

 

GitHub - RUCKUSJERRY/practiceOfAlgorithm

Contribute to RUCKUSJERRY/practiceOfAlgorithm development by creating an account on GitHub.

github.com