11723번: 집합
https://www.acmicpc.net/problem/11723
# 코드
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));
StringBuilder sb = new StringBuilder();
int m = Integer.parseInt(br.readLine());
int[] s = new int[21]; // 21 크기의 배열 S (원소는 모두 0)
StringTokenizer st;
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine(), " ");
String order = st.nextToken();
if (order.equals("all")) {
for (int j = 1; j <= 20; j++) {
s[j] = j;
}
} else if (order.equals("empty")) {
for (int j = 1; j <= 20; j++) {
s[j] = 0;
}
} else {
int x = Integer.parseInt(st.nextToken());
switch (order) {
case "add":
if (s[x] != x) {
s[x] = x;
}
break;
case "remove":
if (s[x] == x) {
s[x] = 0;
}
break;
case "check":
if (s[x] == x) {
sb.append(1 + "\n");
} else {
sb.append(0 + "\n");
}
break;
case "toggle":
if (s[x] == x) {
s[x] = 0;
} else {
s[x] = x;
}
break;
}
}
}
System.out.print(sb);
br.close();
}
}
- x의 범위가 작아 배열을 사용해 집합 S를 구현했다.
- 편의상 인덱스 0은 사용하지 않고, 1부터 20자리에 각 인덱스에 해당하는 수가 있으면 x가 있고, 없으면 x가 없다고 판단하는 보편적인 방식이다.
- 명령어대로 연산하도록 그대로 짰는데 채점해보니 생각보다 시간복잡도가 높았다.
- 하지만 워낙 m의 범위가 넓은 문제였기 때문에 이정도면 선방했다고 생각한다. ( •̀ ω •́ )✧ (Java는 20등이 924ms)
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[CLASS 3: 구현] 백준 17219 비밀번호 찾기 (0) | 2024.10.21 |
---|---|
[CLASS 3: 구현] 백준 1764 듣보잡 (0) | 2024.10.20 |
[CLASS 2: 자료구조] 백준 11866 요세푸스 문제(0) (0) | 2024.10.18 |
[CLASS 2: 자료구조] 백준 10845 큐 (0) | 2024.10.17 |
[CLASS 2: 이분탐색] 백준 10816 숫자 카드(2) (0) | 2024.10.16 |