728x90
문제
https://www.acmicpc.net/problem/11723
풀이
처음에는 21 length를가진 boolean 배열을 이용했는데, 그냥 집합 자료구조를 이용하면 쉽다.
집합은 중복이 되지 않고, 집합의 특정 값에 접근할때, 값을 해쉬하여, 특정 버킷에 바로바로 접근가능하여 빠르다.
집합은 순서 X, 정렬 X, 중복 X
코드
- 배열 이용
package baekjoon.구현;
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main11723 {
static int M;
static boolean[] arr = new boolean[21];
static BufferedWriter bw;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
M = Integer.parseInt(br.readLine());
for(int i = 0; i < M; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String method = st.nextToken();
if(st.hasMoreTokens()){
//add remove check toggle
int value = Integer.parseInt(st.nextToken());
caculation(method, value);
}else{
//all or empty
caculation(method);
}
}
bw.flush();
bw.close();
}
static void caculation(String method, int ...value) throws IOException {
if(method.equals("add")){
int v = value[0];
if(arr[v]) return;
arr[v] = true;
}else if(method.equals("remove")){
int v = value[0];
if(!arr[v]) return;
arr[v] = false;
}else if(method.equals("check")){
int v = value[0];
if(arr[v]){
bw.write(1 + "\n");
}else{
bw.write(0 + "\n");
}
}else if(method.equals("toggle")){
int v = value[0];
if(arr[v]){
arr[v] = false;
}else{
arr[v] = true;
}
}else if(method.equals("all")){
Arrays.fill(arr, true);
}else if(method.equals("empty")){
Arrays.fill(arr, false);
}
}
}
- HashSet이용
package baekjoon.구현;
import java.io.*;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Main11723_set {
static int M;
static Set<Integer> set = new HashSet<>();
static BufferedWriter bw;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
M = Integer.parseInt(br.readLine());
for(int i = 0; i < M; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String method = st.nextToken();
if(st.hasMoreTokens()){
//add remove check toggle
int value = Integer.parseInt(st.nextToken());
caculation(method, value);
}else{
//all or empty
caculation(method);
}
}
bw.flush();
bw.close();
}
static void caculation(String method, int ...value) throws IOException {
if(method.equals("add")){
int v = value[0];
set.add(v);
}else if(method.equals("remove")){
int v = value[0];
set.remove(v);
}else if(method.equals("check")){
int v = value[0];
if(set.contains(v)){
bw.write(1 + "\n");
}else{
bw.write(0 + "\n");
}
}else if(method.equals("toggle")){
int v = value[0];
if(set.contains(v)){
set.remove(v);
}else{
set.add(v);
}
}else if(method.equals("all")){
for(int i = 1; i <= 20; i++){
set.add(i);
}
}else if(method.equals("empty")){
set.clear();
}
}
}
728x90
'algorithm' 카테고리의 다른 글
백준 2108(JAVA) (0) | 2022.06.15 |
---|---|
백준 3980(JAVA) (0) | 2021.11.01 |
백준 2661(JAVA) (0) | 2021.10.31 |
백준 1174(JAVA) (0) | 2021.10.17 |
백준 16987(JAVA) (0) | 2021.10.12 |