백준 bronze 5 - 과제 안 내신 분..?

bw1611·2023년 10월 31일
0
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인 부분을 추출하여 출력해준다. (개인적으로 이 풀이가 더 좋았다.)

profile
Java BackEnd Developer

0개의 댓글