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