728x90
반응형

문제

  • 배열 {5,3,10,2,9,8}을 오름차순으로 정렬하시오.
  • 단, 홀수를 먼저 정렬한 뒤에 짝수를 정렬하시오. →   {3, 5, 9, 2, 8, 10} 
  • 홀수, 짝수의 개수는 같다고 가정한다.
  • Arrays.sort() 사용이 가능하다.

 

 

1.  값이 저장된 배열 하나로 정렬

▶ 코드 순서

1) Arrays.sort()를 이용해 정렬 

		//오름차순 정렬
		Arrays.sort(arr);

		System.out.print("오름차순 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈

 

2) 홀수 정렬

		//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
		for(int i=0;i<arr.length;i++){
			if(arr[i]%2!=0){
				temp=arr[i];
				arr[i]=arr[oddNumber];
				arr[oddNumber]=temp;
				oddNumber++;
			}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
		}
  • 이미 배열은 오름차순으로 정렬이 되어있기 때문에 홀수 값을 순서대로 찾아 앞 쪽으로 옮기면 홀수 값이 정렬된다.

 

3) 짝수 정렬 (뒷 배열에 대해 버블 정렬)

		//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
		for(int i=arr.length-1;i>evenNumber;i--){
			for(int j=evenNumber;j<i;j++){
				if(arr[j]>arr[j+1]){	//앞에 있는 값이 크면 값 정렬
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
  • 무작위로 홀수 값과 자리를 변경했기 때문에 짝수 부분은 정렬이 된 상태가 아니다.
  • 짝수 부분의 정렬을 위해 버블 정렬을 이용했다.
  • 홀수와 짝수의 개수가 같다고 가정하여, 배열의 절반 부분을 담은 변수 evenNumber부터 정렬을 한다. (evenNumber는 마지막 OddNumber의 값과 같으나 가독성을 위해 변수를 만들었다.)

 

 

▶ 전체 코드

		System.out.println("문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.\n");

		int[] arr= {5,3,10,2,9,8};
		int temp;
		int oddNumber=0;
		int evenNumber=arr.length/2;	//홀수와 짝수의 개수는 같다고 가정

		System.out.print("정렬 전:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈
		
		
		//오름차순 정렬
		Arrays.sort(arr);

		System.out.print("오름차순 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}
		System.out.println("\n");//줄바꿈

		
		//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
		for(int i=0;i<arr.length;i++){
			if(arr[i]%2!=0){
				temp=arr[i];
				arr[i]=arr[oddNumber];
				arr[oddNumber]=temp;
				oddNumber++;
			}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
		}

		//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
		for(int i=arr.length-1;i>evenNumber;i--){
			for(int j=evenNumber;j<i;j++){
				if(arr[j]>arr[j+1]){	//앞에 있는 값이 크면 값 정렬
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}

		//출력
		System.out.print("홀수->짝수 순으로 정렬:");
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+" ");
		}

 

 

▶ 출력 결과

문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.

정렬 전:5 3 10 2 9 8 

오름차순 정렬:2 3 5 8 9 10 

홀수->짝수 순으로 정렬:3 5 9 2 8 10

 

 

 

2.  빈 배열을 이용해 정렬

▶ 코드

		int arr[] = {5, 3, 10, 2, 9, 8};
		int arr2[] = new int[arr.length];
		int index = 0;
		
		//배열 정렬
		Arrays.sort(arr);
		System.out.println("배열 정렬:"+Arrays.toString(arr)); //배열 출력
		
		//홀수 입력
		for(int i=0; i<arr.length; i++){
			if(arr[i]%2 != 0){
				arr2[index++] = arr[i]; // {3,5,9,0,0,0}
			}
		}
		
		//짝수 입력
		for(int i=0; i<arr.length; i++){
			if(arr[i]%2 == 0){
				arr2[index++] = arr[i]; // {3,5,9,2,8,10}
			}
		}
		
		//출력
		System.out.println("홀수->짝수 순으로 정렬:"+Arrays.toString(arr2));

 

 

▶ 출력 결과

배열 정렬:[2, 3, 5, 8, 9, 10]
홀수->짝수 순으로 정렬:[3, 5, 9, 2, 8, 10]

 

 

728x90
반응형

'HRD_훈련 > 실습' 카테고리의 다른 글

[JAVA] 심화 문제 풀이 (13일차)  (0) 2023.05.31
[JAVA] 심화 문제 풀이 (12일차)  (0) 2023.05.31
[JAVA] 선택 정렬 보완  (0) 2023.05.28
[JAVA] 선택 정렬과 버블 정렬  (1) 2023.05.25
[JAVA] UP&DOWN 답 맞추기  (0) 2023.05.25

+ Recent posts