투케이2K

233. (java/자바) 알고리즘 : 124 나라의 숫자 - 진법 , 규칙 값 치환 실시 본문

Java

233. (java/자바) 알고리즘 : 124 나라의 숫자 - 진법 , 규칙 값 치환 실시

투케이2K 2021. 8. 11. 11:07

[개발 환경 설정]

개발 툴 : Eclipse

개발 언어 : Java


[소스 코드]

package ex;

public class MainActivity2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("[Program Start]");
		System.out.println("");
		
		/**
		 * [124 나라의 숫자]
		 * 1. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다
		 * 2. 124 나라에는 자연수만 존재하며, 모든 수를 표현할 때 1, 2, 4만 사용합니다
		 * 3. 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return하세요
		 * 4. (10)         (124)
		 *      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
		 * 5. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12899
		 * */
		
		// 초기 변수 선언 실시
		int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
		
		// 결과 확인 메소드 호출 실시 - 반복문을 돌면서 모든 값 확인 실시
		for (int i=0; i<arr.length; i++) {
			System.out.println("결과 : " + solution(arr[i]));
			System.out.println("");			
		}		

	}// 메인 종료
	
	public static String solution(int n) {
		// 결과를 반환할 변수 선언 실시
		String result = "";
		
		// 인풋으로 들어온 데이터 확인 실시
		System.out.println("input : " + n);		
		
		// 로직 처리 실시
		/**
		 * [세부 설명]
		 * 1. 124 나라의 숫자 표시 규칙을 보면 >> 순차적으로 1 2 4 출력 > 1부터 다시 1 2 4 출력 > 2부터 다시 1 2 4 .. 규칙입니다
		 * 2. 124 나라는 3자리 숫자로 판단을 실시합니다 (3의 값 사용)
		 * 3. 인풋으로 들어온 데이터 / 3 >> 반복문을 수행할 값 계산 실시 (3으로 나누어 떨어질 경우 -1 값을 수행합니다)
		 *    - 10 진수 1 / 3 >> 0
		 *    - 10 진수 4 / 3 >> 1
		 *    - 10 진수 7 / 3 >> 2
		 *    		     
		 *    - 10 진수 2 / 3 >> 0
		 *    - 10 진수 5 / 3 >> 1
		 *    - 10 진수 8 / 3 >> 2
		 *    
		 *    - 10 진수 3 / 3 >> 1 - 1 = 0
		 *    - 10 진수 6 / 3 >> 2 - 1 = 1
		 *    - 10 진수 9 / 9 >> 3 - 1 = 2
		 *    
		 * 4. 인풋으로 들어온 데이터 % 3 >> 나머지 값으로 삽입될 데이터 판단 합니다 (3으로 나누어 떨어지는 경우 4로 치환)
		 *    - 10 진수 1 % 3 >> 1
		 *    - 10 진수 4 % 3 >> 1
		 *    - 10 진수 7 % 3 >> 1
		 *    
		 *    - 10 진수 2 % 3 >> 2
		 *    - 10 진수 5 % 3 >> 2
		 *    - 10 진수 8 % 3 >> 2 
		 *    
		 *    - 10 진수 3 % 3 >> 4
		 *    - 10 진수 6 % 3 >> 4
		 *    - 10 진수 9 % 3 >> 4
		 * */
		
		int ans = n; // 인풋으로 들어온 데이터 삽입 (ex : 5) / (ex : 6)
		
		while(ans > 0){ // while 반복문을 돌면서 확인 실시
			// ex : 5) 1회전 : 5 % 3 = 2
			// ex : 5) 2회전 : 1 % 3 = 1			
			// ex : 6) 1회전 : 6 % 3 = 0
			// ex : 6) 2회전 : 1 % 3 = 1
			
			if(ans % 3 == 0) { // 여기에서 3으로 나눠떨어진 경우 4값을 대입합니다
				// ex : 6) 1회전 : 4 삽입
				result = "4" + result;
				ans --; // 값 감소				
			}
			else if(ans % 3 == 1) {
				// ex : 5) 2회전 : 1 삽입
				// ex : 6) 2회전 : 1 삽입
				result = "1" + result;
			}
			else {
				// ex : 5) 1회전 : 2 삽입
				result = "2" + result;
			}			
			
			// ex : 5) 1회전 : 5 / 3 = 1
			// ex : 5) 2회전 : 1 / 3 = 0			
			// ex : 6) 1회전 : 5 / 3 = 1
			// ex : 6) 2회전 : 1 / 3 = 0
			ans = ans / 3;
			
			
			// ex : 5) 1회전 결과 : 2
			// ex : 5) 2회전 결과 : 1 2			
			// ex : 6) 1회전 결과 : 4
			// ex : 6) 2회전 결과 : 1 4
			System.out.println("while : " + result);
		}		
		
		// 결과 반환 실시
		return result;
	}

}// 클래스 종료

[결과 출력]


[요약 설명]

/**

* [124 나라의 숫자]

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

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

* 3. 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return하세요

* 4. 프로그래머스 사이트 : https://programmers.co.kr/learn/courses/30/lessons/12899

* */


 

반응형
Comments