[124 나라 - Medium]

/**
 * <PRE>
 * 1. 개요
 * 
 * 1,2,4 세 개의 숫자만 쓰는 124나라가 있습니다. 
 * 124나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
 *  
 *  10진법의 1 → 1
 *  10진법의 2 → 2
 *  10진법의 3 → 4
 *  10진법의 4 → 11
 *  10진법의 5 → 12
 *  10진법의 6 → 14
 *  10진법의 7 → 21
 *  
 *  10진법의 수 N이 입력될 때, 124나라에서 쓰는 숫자로 변환하여 반환해주는 change124 함수를 
 *  완성해 보세요. 예를 들어 N = 10이면 “41”를 반환해주면 됩니다.
 *  
 *  리턴 타입은 문자열입니다.
 *  
 * (20분)
 * 
 * 2. 예상 결과
 * 
 * 예상 결과는 하기 코드 실행시 예상되는 결과 값입니다.
 * 결과 : 10 을 124나라에서 쓰는 숫자로 변환한 결과 >> 41
 * 
 * </PRE>
 *
 * @author    이준표
 */
public class Test09 {

	private static final String result = "결과 : %d 을 124나라 변환한 결과 >> %s";

	public static void main( String[] args ) {
		// 시작시간 기록
		long startTime = System.currentTimeMillis();

		// STEP 1. TEST 데이터 준비
		int orgNum = 9;

		// STEP 2. 변환
		String answer = changeNum( orgNum );

		System.out.println( String.format( result, orgNum, answer ) );

		// 종료시간 기록
		long endTime = System.currentTimeMillis() - startTime;
		System.out.println( "소요시간 : " + endTime + "ms." );
	}

	/**
	 * 
	 * <PRE>
	 * 124나라에서 쓰는 값으로 변환해준다
	 * </PRE>
	 * 
	 * @param num : 변환할 수
	 * @return 변환된 값 
	 */
	public static String changeNum( int num ) {
		String answer = ""; // 결과데이터
		int rest = 0; // 남은 수

		// STEP 1. 입력된 숫자가 0보다 크다면 계속한다.
		while ( num > 0 ) {

			// STEP 1-1. 현재 남아있는 수에 나머지와 몫을 구한다.(3진법으로 변환)
			rest = num % 3; // 나머지  
			num = num / 3; // 몫

			/*
			STEP 1-2. 나머지가 0인 경우, 0을 쓰지 않기 때문에 
			            자리올림하지 않는다.
			*/ 
			if ( rest == 0 ) {
				num = num - 1; //자리올림을 안 하는 효과
				rest = 4;
			}
			// STEP 1-3. 거꾸로 문자열을 붙인다.
			answer = rest + answer;
		}
		return answer;
	}

}