알고리즘 모음(C++)

백준 27111 - 출입 기록(C++) 본문

백준

백준 27111 - 출입 기록(C++)

공대생의 잡다한 사전 2023. 1. 15. 19:15

문제 링크입니다. https://www.acmicpc.net/problem/27111

 

27111번: 출입 기록

위병소에서 근무하는 헌병은 오늘 근무를 끝마치고 보안 점검을 위해 출입 기록을 살펴보던 중, 오늘 출입 기록의 일부가 누락되었다는 사실을 깨달았다! 오늘 기록된 출입 기록은 총 $N$개이며,

www.acmicpc.net

출입 여부의 누락을 확인하는 문제입니다.

 

A가 입력했는지의 여부를 B의 값으로 주어졌을 때, 누락된 기록값이 있는지를 구하는 문제입니다.

 

여기서 확인해야할 것은 간단합니다.

 

1. B값이 1일 때

   1 - 1. 이전에 A가 들어왔다면, 누락값을 1 추가한다

   1 - 2. 이전에 A가 안들어왔다면, check 값을 1로 만들면서 들어왔다고 해준다.

2. B값이 0일 때

  2- 1. 이전에 A가 들어왔다면, check 값을 0으로 만든다.

  2- 2. 이전에 A가 안들어왔다면, 누락값을 1 추가한다.

 

마지막으로 1~X 까지 인원 수 만큼 check값을 확인합니다. check 값이 0이 아닌 값이 있다면, 해당 값만큼 누락값에 추가한다.

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>
#define P pair<int,int>
#define F first
#define S second
#define LL long long

using namespace std;

int N, number;
int check[200001];

void solve(){
    int ans = 0;
    for(int i = 1 ; i <= N; i++){
        int x, y;
        cin >> x >> y;
        number = max(number, x);
        if(y == 0){
            if(check[x] == 1) check[x] = 0;
            else ans++;
        }
        else{
            if(check[x] == 1) ans++;
            else check[x] = 1;
        }
    }
    for(int i = 1; i <= number; i++){
        if(check[i] != 0) ans++;
    }
    cout << ans;
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	solve();
	return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요

'백준' 카테고리의 다른 글

백준 3053 - 택시 기하학(C++)  (0) 2023.01.15
백준 4673 - 셀프 넘버(C++)  (2) 2023.01.15
백준 27110 - 특식 배부(C++)  (0) 2023.01.15
백준 10942 - 팰린드롬?(C++)  (2) 2023.01.11
백준 16174 - 점프왕 쩰리(Large) (C++)  (0) 2023.01.11