문제 풀이 (JAVA)

import java.util.*;
public class part6_1 {

	public static void main(String[] args) {
		// 선택 정렬
		Scanner input = new Scanner(System.in);
		
		int N = input.nextInt();
		
		int [] intarr = new int[N];
		
		for(int i=0; i<N; i++) {
			intarr[i] = input.nextInt();
		}
		int [] arr = solution(intarr,N);
		for(int i=0; i<arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
	private static int [] solution(int [] a, int n) {
		int min=0;
		int tmp=0;
		// 선택정렬은 앞부터 하나씩 비교하여 서로간의 위치를 바꾼다.(모든 경우 탐색)
		for(int i=0; i<n; i++){
			min=a[i]; // 최솟값 초기화
			for(int j=i+1; j<n; j++) {
				if(min > a[j]) {
					tmp = a[i]; // 앞의 값 임시 저장
					min = a[j]; // 최소는 비교하는 뒤의 값
					a[i] = a[j]; // 뒤의 값 을 앞에 값에 덮어쓰기
					a[j] = tmp; // 뒤의 값을 임시저장한 앞의값 추가
				}
			}
		}
		return a;
	}
}

주요 핵심 포인트

1. 선택 정렬은 i번째 인덱스부터 시작하여  i+1번째 다음 숫자부터 하나씩 비교하여 값이 더 작거나 크다면 값을 교체한다.

2. i번째 인덱스에서 모든 j번째 인덱스를 탐색하여 값을 구했을시 확정된 값은 비교하지 않고 다음 i+1번째부터 1을 반복한다.

 

개선해야할 사항

1. 확정된 숫자는 더이상 비교하지 않고 다음 배열을 반복해서 비교한다는 사실을 기억하자. 정렬은 종류가 여러가지라 헷갈릴수 있다.

+ Recent posts