![[백준/JAVA] 11723번 집합](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdsd89%2FbtsKQFiV5J7%2Fyk43vLUcoawCwTN0jMGZn0%2Fimg.webp)

[백준/JAVA] 11723번 집합Coding Test/백준2024. 11. 21. 11:34
문제
더보기

입출력 예시1
문제 링크
https://www.acmicpc.net/problem/11723
문제 설명
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.
- add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
- remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
- check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
- toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
- all: S를 {1, 2, ..., 20} 으로 바꾼다.
- empty: S를 공집합으로 바꾼다.
제한 사항
메모리 제한
- Java 8: 448 MB
- Java 8 (OpenJDK): 448 MB
- Java 11: 448 MB
- Kotlin (JVM): 448 MB
- C#: 64 MB
- Java 15: 448 MB
- F#: 64 MB
- Visual Basic: 64 MB
입출력 예시

문제 풀이
접근 방법
- 공집합 S는 1에서 20까지 들어가는 중복이 상관없는 집합이다.
- 요소의 유무만 파악하면 되니까 boolean 배열을 사용
- add, remove 등 해당 배열 위치의 값을 보고 함수를 수행한다.
- 입력 연산에 맞춰 함수를 수행시킨다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;
public class P_11723 implements Problem {
static boolean[] S;
static StringBuilder result;
@Override
public void exec() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int M = Integer.parseInt(br.readLine());
String[] cmdLine;
S = new boolean[20];
result = new StringBuilder();
for (int i=0; i<M; i++) {
cmdLine = br.readLine().split(" ");
switch (cmdLine[0]) {
case "add":
add(Integer.parseInt(cmdLine[1]));
break;
case "remove":
remove(Integer.parseInt(cmdLine[1]));
break;
case "check":
check(Integer.parseInt(cmdLine[1]));
break;
case "toggle":
toggle(Integer.parseInt(cmdLine[1]));
break;
case "all":
all();
break;
case "empty":
empty();
break;
}
}
result.deleteCharAt(result.length()-1);
System.out.print(result);
}
private static void add(int element) {
S[element-1] = true;
}
private static void remove(int element) {
S[element-1] = false;
}
private static void check(int element) {
if (S[element-1]) {
result.append(1).append("\n");
} else {
result.append(0).append("\n");
}
}
private static void toggle(int element) {
S[element-1] = !S[element - 1];
}
private static void all() {
for (int i=0; i<20; i++) {
S[i] = true;
}
}
private static void empty() {
for (int i=0; i<20; i++) {
S[i] = false;
}
}
}
반응형
'Coding Test > 백준' 카테고리의 다른 글
[백준/JAVA] 9095번 1, 2, 3 더하기 (dp) (0) | 2024.11.22 |
---|---|
[백준/JAVA] 1463번 1로 만들기 (dp) (0) | 2024.11.22 |
[백준/JAVA] 11399번 ATM (1) | 2024.11.21 |
[백준/JAVA] 1764번 듣보잡 (0) | 2024.11.21 |
[백준/JAVA] 1018번 체스판 다시 칠하기 (0) | 2024.11.06 |

@dundun213 :: dundun213 님의 블로그
dundun213 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!