제이슨의 개발이야기

[코딩테스트] 124 나라의 숫자 Java 프로그래머스 level 2 3진법 본문

코딩테스트

[코딩테스트] 124 나라의 숫자 Java 프로그래머스 level 2 3진법

제이쓰은 2021. 5. 27. 15:05
728x90
반응형

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

안녕하세요 ! 오늘 저는 프로그래머스 에서 처음으로 level 2 문제를 풀어봤습니다!

 

확실히 level 1 보다는 어려웠고 좀 더 생각이 필요한거같았습니다

그러나 막 너무 어렵다 , 못풀겠다 이정도는 아니었습니다 ㅎㅎ 

 

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

 

10진법 124 나라 10진법 124 나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

이 문제는 124 나라는 3진법을 사용하는 나라라고 생각하면 쉽고 0은 4로 바꿨다고 생각하면 됩니다!

그리고 나서 각 수를 3으로 나누면서 나머지 값과 몫이 3이하가 될때까지 반복하면 됩니다! 

 

ex) 10진법 3은 

3/3 -> 몫 1 나머지0

0은 4로 바꾸고 나머지가 0일 경우 몫은 -1 한다 

3 -> 4로 바뀜

 

10진법 10은 

10/3 -> 몫 3 나머지 1

3은 4로 바꾸면 

10 -> 41로 바뀜 

 

10진법 16은

 

16/3 -> 몫 5 나머지 1

5는 4이상이므로 한번 더 나눈다 

5/3 -> 몫 1 나머지 2 

 

따라서 16은 121이된다 

 

저는 이러한 원리를 이용해서 문제를 풀면 되겠다 란 판단을 했고 문제를 풀었습니다

 

class Solution {
    public String solution(int n) {
        return divide(n);
    }

    private String divide(int n){
        String result ="";
        if(n/3>3){
            if(n%3==0){
                result = result.concat(divide(n/3-1));
                result = result.concat(String.valueOf(4));
            }else{
                result = result.concat(divide(n/3));
                result = result.concat(String.valueOf(n%3));
            }
        }else {
            if(n==1 || n==2 || n==3){
                if(n==3){
                    result = result.concat(String.valueOf(4));
                }else{
                    result = result.concat(String.valueOf(n));
                }
            } else if(n/3==0){
                return result;
            }else if(n%3==0){
                result  = result.concat(String.valueOf((n/3)-1));
                result = result.concat(String.valueOf(4));
            }else {
                if (n / 3 == 3) {
                    result = result.concat(String.valueOf(n/3+1));
                    result = result.concat(String.valueOf(n%3));
                }else{
                    result = result.concat(String.valueOf(n/3));
                    result = result.concat(String.valueOf(n%3));    
                }
            }
        }
        return result;
    }
}

 

풀고 나서 다른 분이 푸신 문제를 봤는대 정말 너무 좋고 똑똑한 코드인거 같아서 밑에 같이 올립니다! 

항상 자기가 풀고 다른 분이 푼 코드랑 비교해보는것도 큰 공부인거같습니다 ㅎㅎ

 

class Solution {
  public String solution(int n) {
      String[] num = {"4","1","2"};
      String answer = "";

      while(n > 0){
          answer = num[n % 3] + answer;
          n = (n - 1) / 3;
      }
      return answer;
  }
}
728x90
반응형