본문 바로가기
알고리즘연습/Programmers

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

by 밈밈무 2021. 5. 9.

문제

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

 

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

 

programmers.co.kr

문제 설명

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이하의 자연수 입니다.

입출력 예

n result
1 1
2 2
3 4
4 11

 

풀이

숫자 종류가 세 개이기 때문에 연산에서 %3과 /3가 쓰인다. 중요한 건 규칙을 찾는 건데 내가 찾은 규칙은 n을 3으로 나눴을 때 나머지가 0일 때는 4, 1일 때는 1, 2일 때는 2를 뒤에서부터 붙여줘야한다는 것, 숫자를 string에 추가하고 n에 n/3 값을 대입한다는 것이다. 단 이 때 n이 3의 배수인 경우 n에 (n-1)/3이 대입된다.

 

코드

 

package Level2;

public class _124나라의숫자 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(solution(1));
	}
	
	public static String solution(int n) {
		String answer="";
		String []nums= {"4","1", "2"};
		StringBuilder sb=new StringBuilder();
		
		while(n>0) {
			sb.append(nums[n%3]);
			n=(n-1)/3;
		}
		
		sb.reverse();
		
		answer=sb.toString();
		return answer;
	}
}

이게 내가 짠 코드인데... 프로그래머스에서 다른 사람 풀이 보기에 있던 코드가 훨씬 깔끔한 것 같아서 같이 가져왔다...  

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