Algorithm/Baekjoon

백준 / 1453번 / 피시방 알바

Gyuri 2022. 7. 16. 23:42

[문제]

세준이는 피시방에서 아르바이트를 한다. 세준이의 피시방에는 1번부터 100번까지 컴퓨터가 있다.

들어오는 손님은 모두 자기가 앉고 싶은 자리에만 앉고싶어한다. 따라서 들어오면서 번호를 말한다. 만약에 그 자리에 사람이 없으면 그 손님은 그 자리에 앉아서 컴퓨터를 할 수 있고, 사람이 있다면 거절당한다.

거절당하는 사람의 수를 출력하는 프로그램을 작성하시오. 자리는 맨 처음에 모두 비어있고, 어떤 사람이 자리에 앉으면 자리를 비우는 일은 없다.

[입력]

첫째 줄에 손님의 수 N이 주어진다. N은 100보다 작거나 같다. 둘째 줄에 손님이 들어오는 순서대로 각 손님이 앉고 싶어하는 자리가 입력으로 주어진다.

[출력]

첫째 줄에 거절당하는 사람의 수를 출력한다.

[예제 입력]

3
1 2 3

[예제 출력]

0

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); 
        int[] arr = new int[101]; 
        
        for (int i : arr) {
            i = 0;
        }

        for(int i=0; i<n; i++) {
            arr[sc.nextInt()]++;
        }

        int num = 0;
        for(int i=0; i<arr.length; i++) {
            if(arr[i] >= 2) {
                num += arr[i]-1;
            }
        }
        System.out.println(num);
    }   
}

 

1번부터 100번까지 피시방 자리 배열을 만든 후,만약 손님이 1번 자리에 앉았으면 arr[1]의 값에 +1, 100번 자리에 앉으면 arr[100]의 값에 +1 해주는 식으로 코드를 짰다.

 

이렇게 되면만약 이미 사람이 있는 자리에 앉으려 시도했으면(거절 당했다면) 그 배열의 값은 2 이상의 값일 것이다 (2명 이상인 경우)

 

따라서, 배열을 돌며2 이상의 값을 가진 자리를 찾는다.num(거절 당한 사람의 수)의 값은 그 자리의 값의 -1을 한 값이 된다! (한 명은 앉을 수 있으므로 거절 당하지 않음)