728x90
반응형
2024.06.09기준 - 브론즈2
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 컴퓨터가 감염되지 않는 수를 출력하는 문제입니다.
이 문제의 조건은
- 1 x가 들어오면 x번째 컴퓨터가 감염됩니다.
- 2 x가 들어오면 x번째 컴퓨터가 치료됩니다.
- 3 이 들어오면 감염되지 않은 컴퓨터 수를 출력합니다.
이 문제에 접근할때 boolean[]을 이용해 컴퓨터 감염 여부를 for문을 사용해서 개수를 세어 주었는데 시간초과가 나와 변경을 변경했습니다.
switch를 이용해 입력된 번호가 무엇인지 확인했습니다.
- 1이 들어오면 컴퓨터를 감염시키면서 감염이 안되어 있던 컴퓨터면 전체 count를 -1 했습니다.
- 2가 들어오면 컴퓨터를 치료시키면서 감염이 되어 있던 컴퓨터면 전체 count를 +1 했습니다.
- 3이 들어오면 전체 count를 출력했습니다.
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 비치된 컴퓨터 개수
int q = Integer.parseInt(st.nextToken()); // 쿼리의 개수
// 컴퓨터 감염 여부 (true : 감염, false : 비감염)
boolean[] visit = new boolean[n + 1];
int count = n; // 감염되지 않은 컴퓨터 개수
int number, x;
while (q-- > 0) {
st = new StringTokenizer(br.readLine());
number = Integer.parseInt(st.nextToken());
switch (number) {
case 1:
x = Integer.parseInt(st.nextToken());
if (!visit[x]) { // 감염이 안된 컴퓨터라면 count--
count--;
}
visit[x] = true; // 감염시킨다.
break;
case 2:
x = Integer.parseInt(st.nextToken());
if (visit[x]) { // 감염이 된 컴퓨터라면 count++
count++;
}
visit[x] = false; // 치료한다.
break;
case 3: // 감염되지 않은 컴퓨터 개수를 출력한다.
sb.append(count).append("\n");
break;
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31884번 Stacking Sticks (0) | 2024.06.12 |
---|---|
BAEKJOON / 백준 - JAVA 31882번 근수 (2) | 2024.06.10 |
BAEKJOON / 백준 - JAVA 31926번 밤양갱 (0) | 2024.06.04 |
BAEKJOON / 백준 - JAVA 31872번 강의실 (0) | 2024.05.31 |
BAEKJOON / 백준 - JAVA 31870번 버블버블 (0) | 2024.05.30 |