int[] arr = {5, 3, 1, 4, 6, 1};
int[] visited = new int[arr.length];
int visitCnt = 0;
int minVal = Integer.MAX_VALUE;
int minIdx = -1;
while (visitCnt < arr.length) {
for (int i = 0; i < arr.length; i++) { // 최솟값 찾기
if (arr[i] < minVal && visited[i] == 0) {
minVal = arr[i];
minIdx = i;
}
}
if (minIdx != -1) {
System.out.print(minVal + " ");
visited[minIdx] = 1;
visitCnt++;
}
minVal = Integer.MAX_VALUE;
minIdx = -1;
}
방문한 것을 표시할 int[] visited
배열, 방문 개수를 표시하여 while문의 조건으로 사용할 visitCnt
, 최솟값의 인덱스와 값을 저장할 minIdx
, minVal
을 선언한다.
while문은 visitCnt가 arr.length보다 작을때까지 시행한다.
for문을 돌며 최솟값을 찾고 그 값이 방문하지 않은 값이라면 minVal과 minIdx를 설정한다.
최솟값을 찾은 후 minIdx가 -1이 아니라면(최솟값을 찾았다면) 해당 값을 출력하고 visited[minIDx]++
를 하여 방문함을 표시하고, visitCnt++
로 방문한 횟수를 count한다.
minVal과 minIdx는 다시 초기화시킨다.
int[] arr = {1, 5, 3, 2, 2, 3, 1, 4, 1, 2, 3, 5};
int[] arrResult = new int[arr.length];
int cnt = 0;
for (int i = 0; i < arr.length; i++) {
boolean dupFlag = false; // 중복된 데이터인지 아닌지 체크할 변수
for (int j = 0; j < cnt; j++) {
if (arr[i] == arrResult[j]) {
dupFlag = true;
break;
}
}
if (dupFlag == false) {
arrResult[cnt++] = arr[i];
}
}
for (int i = 0; i < cnt; i++) {
System.out.print(arrResult[i] + " ");
}
arrResult에 채워진 값의 개수들을 체크할 cnt와 결과 배열 arrResult
를 선언한다.
arr배열
을 반복문으로 돌며
2.1. 중복된 데이터인지 아닌지 체크할 변수를 만들고 (boolean dupFlag으로 체크)
2.2. cnt
만큼 arrResult
배열을 돌며 중복된 데이터가 있으면 dupFlag
를 true
로 설정하고 break한다(남은 반복문 돌릴 이유 X).
2.3. 반복문을 끝까지 돌고도 dupFlag가 false
이면 중복된 데이터가 없는 것이므로 arrResult[cnt++]
에 arr[i]값을 넣어준다.