SFPC/2021

2021 SFPC pA1

열정아빠와아들 2023. 2. 3. 15:56
#include <stdio.h>


int main()
{
    // n은 주차 공간의 수, a는 첫번째 날에 주차된 차량의 수, b는 두번째 날에 주차된 차량의 수
    int n, a, b; 
    
    // A 배열은 첫째 날 사용된 주차 공간의 번호들을 저장해놓은 배열
    // B 배열은 둘째 날 사용된 주차 공간의 번호들을 저장해놓은 배열
    int A[100], B[100];

    scanf("%d %d %d", &n, &a, &b);

    /// A, B 배열에 1부터 a, b까지 주차 공간의 번호 저장
    for (int i = 1; i <= a; i++)
        scanf("%d", &A[i]);
    for (int i = 1; i <= b; i++)
        scanf("%d", &B[i]);

    // count1에 모두 사용된 주차 공간을 저장
    int count1 = 0;
    for (int k = 1; k <= n; k++) // 1부터 n까지 돌려 두 배열에 같은 주차 번호가 있는지 확인하는 for문
    {
        // k_count를 이용해 count1를 좌우
        int k_count = 0;
        // 1부터 a까지 돌려 배열 A에 k가 있는지 확인하고
        // 있으면 k_count에 1을 추가
        for (int i = 1; i <= a; i++) 
            if (A[i] == k) k_count++;

        // 1부터 b까지 돌려 배열 B에 k가 있는지 확인하고
        // 있으면 k_count에 1을 추가
        for (int j = 1; j <= b; j++)
            if (B[j] == k) k_count++;

        // k_count가 2라는 것은 두 배열에 같은 주차 번호가 있다는 것이므로 count1에 1을 추가
        if (k_count == 2) count1++; 
    }
    
    // count2에 모두 사용되지 않은 주차 공간을 저장
    int count2 = 0;

    // 1부터 n까지 돌려 두 배열에 같은 주차 번호가 없는지 확인하는 for문
    for (int k = 1; k <= n; k++) 
    {
        // k_count를 이용해 count2를 좌우
        int k_count = 0;

        // 1부터 a까지 돌려 배열 A에 k가 있는지 확인하고
        // 있으면 k_count에 1을 추가
        for (int i = 1; i <= a; i++)
            if (A[i] == k) k_count++;

        // 1부터 b까지 돌려 배열 B에 k가 있는지 확인하고
        // 있으면 k_count에 1을 추가
        for (int j = 1; j <= b; j++)
            if (B[j] == k) k_count++;

        // k_count가 0이라는건 두 배열에 공통적으로 없는 주차 번호가 있다는 뜻이므로
        // count2에 1을 더해준다.
        if (k_count == 0) count2++;
    }
    // 순서대로 출력
    printf("%d %d", count2, count1);
}