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

2020-01-13

124 나라의 숫자 (programers > lev2 > Number_Change)

문제 링크

문제설명

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


풀이

	static public String solution(int n) {
	      String answer = "";
	      
	      int rest = 0;
	      while(n>0) {
	    	 //rest가 0일때랑 아닐때랑 구분해서 문제를 해결한다.
	    	 rest = n%3;
	    	 n = n/3;
	    	 
	    	 //어차피 나머지는 무조건 0,1,2 중 하나다
	    	 if(rest==0) {
	    		 rest = 4; // 밑에서 더해줄거니까 4로 바꿔주고
	    		 n = n-1; // 몫은  3%3 6%3 9%3 구간 등 때 필요 -> 자리올림을 안하는 효과!
	    	 }
	    	 
	    	 answer = rest + answer;
	    	  
	      }
	      
	      
	      return answer;
	}


후기

처음에는 rest 와 quotient로 나눠 생각하고 rest==0, rest==1, rest==2 이런식으로 생각했더니 if문이 길어지고 꼬였다.

rest로만 문제를 해결한다는 생각이 잘 떠오르지 않았다!

while을 돌 때마다 나오는 rest는 어차피 답의 끝부분에 해당되고, rest==0일 때 (자리올림을 안하는 효과)처리해주는 것만 생각하면 됐었다.

  • 처음 생각 했던 방식
	static public String solution(int n) {
	      String answer = "";
	      
	      while(true) {
	    	  int q = n/3;
	    	  int r = n%3;
	    	     	  
	    	  //몫이 3보다 크면 계속 해줌
              ->설정 오류 3보다   아니고 0보다 클때 나오는 나머지를 계속 + 해줘야 
	    	  if(q>3)
	    		  n=q;
	    	  else{
                  -> 부분에서 r==0이면 4 바꿔주고 n-1  고쳤어야 했다.
	    		  if(r==0) {
	    			  if(q==2)
	    				  answer = "1" + answer;
	    			  else if(q==3)
	    				  answer = "2" + answer;
	    		  }
	    		  else {
	    			  if(q==1)
	    				  answer = "1" + answer;
	    			  else if(q==2)
	    				  answer = "2" + answer;
	    			  else if(q==3)
	    				  answer = "4" + answer;
	    		  } -> 이부분은 answer = r + answer; 바꿀  있었다.
	    		  break;
	    	  }
	    	  
	      }
	      
	      return answer;
	}



tip

  1. /와 % 쓰는 문제가 아직 익숙치 않은데 반복되는 부분이 뭐였는지 생각해서 변수를 잘 설정해야 하겠다…
  2. 전에 풀 때는 거의 이해도 못했었는데 오늘은 그래도 3으로 나누고 그 나머지와 몫으로 해결한다는 것까지는 생각해냈다!