import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class P10813 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[28];
for (int i = 0; i < 28; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
solution(arr);
}
private static void solution(int[] arr) {
Arrays.sort(arr);
List<Integer> arrList = new ArrayList<>();
int count = 0;
for (int i = 1; i <= arr.length; i++) {
if (arr[i - count - 1] != i) {
count++;
arrList.add(i);
}
}
if (count == 0) {
arrList.add(29);
arrList.add(30);
} else if (count == 1) {
arrList.add(30);
}
for (Integer integer : arrList) {
System.out.println(integer);
}
}
}
1, 우선 sort로 정렬해줬습니다.
2, arr[i]와 i를 비교해줍니다. 같을때는 그냥 지나가지만 다를 경우 i를 arrList에 넣어줍니다. 만약 1, 3, 4 가 들어왔다고 가정하면 1은 통과되지만 i는 2를 가르키는데 arr[i - 1] = 3이므로 값이다릅니다. 이럴 경우 arrList에 i를 넣어주고 count를 추가로 뺴주기로 했습니다.
3, count가 0이라면 1~28까지 문제가 없는 경우 이므로 29와 30을 더해주고, count가 1일 경우 1~29까지 부족한 숫자가 하나이므로 30만 추가해주었습니다.
다른 풀이
public class P10813 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] address = new int[31];
for(int i=1; i<29; i++) {
address[scan.nextInt()]++;
}
System.out.println(Arrays.toString(address));
for(int i=1; i<address.length; i++) {
if(address[i] == 0)
System.out.println(i);
}
scan.close();
}
}
1, 배열을 31까지 만들어준다 (0번쨰 인덱스는 포함하지 않기 위하여 31까지 선언)
2, address[scan.nextInt()]++
을 통해 [0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 입력값에 대한 인덱스를 기억해준다.
3, 0인 부분을 추출하여 출력해준다. (개인적으로 이 풀이가 더 좋았다.)