조앤의 기술블로그

[프로그래머스] 124 나라의 숫자(java) ⭐️ 본문

Programming/프로그래머스

[프로그래머스] 124 나라의 숫자(java) ⭐️

쬬앤 2020. 3. 17. 17:46

[문제]

문제 설명

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 함수를 완성해 주세요.

제한사항

  • n은 500,000,000이하의 자연수 입니다.

입출력 예

nresult

1 1
2 2
3 4
4 11

 

 

[1차 코드]

class Solution {
    static String change(int num) {
        if(num == 1) 
            return "1";
        else if(num == 2)
            return "2";
        else if(num == 3)
            return "4";
        else{
            return change(num/3) + change(num%3);
        }
    }
    
    public String solution(int n) {
      String answer = "";
        answer = change(n);
      return answer;
  }
    
    
}

재귀로 풀었더니 테스트 케이스 2개만 통과. 효율성 테스트는 다 불통과

재귀로 풀면 안되나보다.

 

[2차 시도 코드]

class Solution {
  public String solution(int n) {
      String answer = "";
      
      while(n > 0){
          int rest = n % 3;
          n /= 3;
          if(rest == 0){
              rest = 4;
              n -= 1; // 나누어 떨어졌으니까 
          }
          answer = rest + answer;
      }
      
      return answer;
  }
}

 

 

 

[다른 사람의 풀이 - 기가막힌 코드]

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;
  }
}

👏 

 

[참고]

https://aig2029.tistory.com/110

 

[프로그래머스][Java] 124나라의 숫자

3진법을 조금 응용한 문제인데 나머지가 0이 되게 떨어지는 구간만 따로 처리해주면 된다 나머지가 0일때 몫을 하나 떨궈주고 나머지를 4로 교체시켜줌 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class So..

aig2029.tistory.com

[문제링크]

https://programmers.co.kr/learn/challenges?tab=all_challenges

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr