본문 바로가기

JAVA

[JAVA] 기초 알고리즘 문제 - 네 자리 정수 교차 하여 최솟값 만들기

728x90

 

이번 글에서는 자바를 이용해서 간단한 알고리즘 문제를 풀어보도록 하겠습니다 !

 

문제는 다음과 같습니다.

 

1000 ~ 9999 사이의 네 자리 정수가 있습니다.
네 자리 숫자의 자리를 교차해 가장 작은 수로 변경하는 프로그램을 코드로 작성하십시오.
( 단, 0이 첫번째 자리에 올 수는 없습니다. )
  • ex) 입력 : 2330, 교차 가능한 수 : 2033, 2303, 2330, 3023, 3203, 3230, 3302, 3320

 

1000부터 9999까지의 숫자를 모두 출력합니다.

다음은 출력 예시 입니다.

 

 

다음은 정답 코드입니다.

 


1000부터 10000으로 반복문을 돌려주고,

최솟값을 담을 num array를 만들어서 1000의 자릿수, 100의 자릿수, 10의 자릿수, 1의 자릿수를 순서대로 넣어줍니다.

num array를 오름차순으로 정렬해주고,

입력받은 값에 0이 몇개 포함되어있는지 카운팅 해서 경우의 수를 나눠줍니다.

해당 경우에 나오는 최솟값 새로운 변수에 넣어서 출력해줍니다.

 

import java.util.Arrays;

public class algorithm1 {
	public static void print() {
		for(int i = 1000; i < 10000; i++) {
			int[] num = new int[4];
			for(int x = 0; x < 4; x++) {
				if(x == 0) {
					num[x] = i/1000;
				}else {
					num[x] = (int) (i%(Math.pow(10,4-x))/(Math.pow(10, 3-x)));
				}
			}
			Arrays.sort(num);
			int zeroCnt = 0;
			for(int k = 0; k < 4; k++) {
				if(num[k]==0) {
					zeroCnt++;
				}
			}
			int temp = 0;
			if(zeroCnt==0) {
				temp = num[0]* 1000 + num[1]*100 + num[2]*10 + num[3];
			}else if(zeroCnt==1) {
				temp = num[1]* 1000 + num[0]*100 + num[2]*10 + num[3];		
			}else if(zeroCnt==2) {
				temp = num[2]* 1000 + num[0]*100 + num[1]*10 + num[3];
			}else if(zeroCnt==3) {
				temp = num[3]* 1000 + num[0]*100 + num[1]*10 + num[2];
			}
			
			System.out.println(i + " " + temp);
		}
	}
}

 

감사합니다 !