K512에 바이러스 퍼뜨리기
면접 대비시간 제한2초메모리 제한512 MB
N대의 컴퓨터에 감염과 치료 쿼리를 처리하고, 조회 쿼리마다 감염되지 않은 컴퓨터 수를 출력합니다.
문제
K512는 내일 열리는 K512컵 준비로 한창 바쁘다. K512에는 총 대의 컴퓨터가 있으며, 각각 번부터 번까지 번호가 붙어 있다.
장난을 좋아하는 승형이는 K512의 PC에 바이러스를 퍼뜨려 K512컵을 망칠 계획을 세웠다. 그러나 이를 알아챈 근수는 PC를 치료해 다시 감염되지 않은 상태로 만들려고 한다. 처음에는 모든 컴퓨터가 감염되지 않은 상태이다. 승형이가 감염시키는 컴퓨터와 근수가 치료하는 컴퓨터의 번호가 주어질 때, K512에서 감염되지 않은 PC의 수를 구해 보자.
입력
첫 번째 줄에 컴퓨터의 개수 과 쿼리의 개수 가 주어진다. 이어지는 개의 줄에는 다음 쿼리 중 하나가 한 줄에 하나씩 주어진다.
- : 승형이가 번 컴퓨터를 감염시킨다. 이미 감염된 컴퓨터를 다시 감염시킬 수 있으며, 이때는 아무 변화가 없다.
- : 근수가 번 컴퓨터를 치료해 감염되지 않은 상태로 만든다. 감염되지 않은 컴퓨터를 치료할 수 있으며, 이때는 아무 변화가 없다.
- : K512에서 현재 감염되지 않은 컴퓨터의 개수를 출력한다.
출력
의 쿼리가 주어질 때마다 그 답을 한 줄에 출력한다. 의 쿼리는 하나 이상 주어진다.
힌트
입출력이 느리면 여러 줄을 읽거나 출력할 때 시간 초과가 날 수 있으므로, 언어별로 다음 방법을 권장한다.
-
C++:
cin/cout을 사용하려면main함수의 첫 줄에 아래 두 줄을 넣고, 출력할 때는endl대신 개행 문자(\n)를 사용한다. 이렇게 하면scanf/printf/puts/getchar/putchar등 C의 입출력 방식은 더 이상 쓸 수 없다.cin.tie(nullptr);sync_with_stdio(false);
-
Python:
input대신 아래 코드를 사용한다.sys.stdin.readline.rstrip()
-
Java, Kotlin:
Scanner와System.out.println대신BufferedReader와BufferedWriter를 사용한다.BufferedWriter.flush는 프로그램이 끝나기 전에 한 번만 호출하면 된다.