곽로그
[백준 11723, Java] 집합 본문
반응형
문제
풀이
switch문을 이용해서 명령문 마다 분기하는 것까지는 다 비슷할 것 같다. 여기서는 집합을 어떻게 표시할 것인지에 따라서 풀이가 달라질 것 같다.
"S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다."를 보고서 HashSet으로 풀어야 겠다 생각했다. x가 이미 있는 상태에서 add를 해도 무시되기 때문이다. 나머지 명령어들도 hash에서 제공되는 메서드를 이용하면 쉽게 풀 수 있다.
이전에는 크기가 21인 boolean[] array 배열을 선언해서 인덱스가 x 라 생각하고, x가 존재하면 array[x] = true라고 생각해서 풀었었다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
HashSet<Integer> set = new LinkedHashSet<>();
int M = Integer.parseInt(br.readLine());
for(int m = 0;m<M; m++){
st = new StringTokenizer(br.readLine()," ");
String command = st.nextToken();
int x = 0;
switch (command){
case "add" :
x = Integer.parseInt(st.nextToken());
set.add(x);
break;
case "remove":
x = Integer.parseInt(st.nextToken());
set.remove(x);
break;
case "check" :
x = Integer.parseInt(st.nextToken());
if(set.contains(x)) bw.write("1\n");
else bw.write("0\n");
break;
case "toggle" :
x = Integer.parseInt(st.nextToken());
if(set.contains(x)) set.remove(x);
else set.add(x);
break;
case "all" :
for(int num = 1; num<=20; num++){
set.add(num);
}
break;
case "empty" :
set.clear();
break;
}
}
bw.flush();
}
}
코드
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준2588 python] 곱셈 (0) | 2022.04.14 |
---|---|
[백준 15658, Java] 연산자 끼워넣기(2) (0) | 2021.06.17 |
[백준 10971, Java] 외판원 순회 2 (0) | 2021.04.28 |
[백준 10819, Java] 차이를 최대로 (0) | 2021.04.27 |
[백준 10973, Java] 이전 순열 (0) | 2021.04.26 |
Comments