티스토리 뷰
1) 생각
주어진 명령대로 집합을 만들고 CHECK 명령어가 들어오면 해당 숫자가 있으면 1 없으면 0을 출력해라.
처음 생각
중복으로 들어와도 1번으로 처리되기 때문에 HashSet 자료구조를 사용하여 구현했었다.
2) 방안
1) 숫자가 20으로 제한되어 있고, 모두 삭제하는 명령어와 모두 집어넣는 명령어가 있기 때문에 배열을 만들어 Arrays.fill() 메소드를 이용하여 HashSet을 사용했을 때보다 시간을 절약하였다.
2) 풀이를 살펴보니 비트마스크를 사용하신 분들이 있었는데 이경우는 더 빠르고 효율적으로 돌아갈 것 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashSet; import java.util.StringTokenizer; public class Main{ static int[] arr = new int[21]; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for(int i=0;i<tc;i++) { StringTokenizer st = new StringTokenizer(br.readLine()); switch(st.nextToken()) { case "add": arr[Integer.parseInt(st.nextToken())] = 1; break; case "check": if(arr[Integer.parseInt(st.nextToken())]==1) sb.append(1+"\n"); else sb.append(0+"\n"); break; case "remove": arr[Integer.parseInt(st.nextToken())] = 0; break; case "toggle": int t = Integer.parseInt(st.nextToken()); if(arr[t]==1) arr[t] = 0; else arr[t] = 1; break; case "all": Arrays.fill(arr, 1); break; case "empty": Arrays.fill(arr, 0); break; } } System.out.println(sb); } } | cs |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 13458번 시험 감독(Java) (0) | 2018.08.27 |
---|---|
[백준] 1237번 정ㅋ벅ㅋ (0) | 2018.08.27 |
[백준] 1987번 알파벳 (0) | 2018.08.27 |
[백준] 11403번 경로 찾기 (0) | 2018.08.27 |
[백준] 9663번 N-Queen (0) | 2018.08.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday