1 minute read



문제 풀이


이번 문제는 문제의 요구사항대로 구현만 잘 하면 풀 수 있는 문제이다.


아이디어 도출

연산마다 문자열이 주어지는데, 공백을 기준으로 첫번째 문자열은 명령, 두번째 문자열은 명령을 수행할 수가 된다. 명령이 add, remove, check, toggle, all, empty 일 때마다 다른 연산을 수행해야 하는데, 그 중 check 명령일 때만 출력을 수행한다.

명령마다 수행해야 할 내용은 다음과 같다. 참고로 필자는 문제에서 말하는 공집합 S를 ArrayList로 정의하고 풀었다.

  1. add: 리스트 S에 x가 존재하지 않는다면, x를 삽입한다.
  2. remove: 리스트 S에 x가 존재한다면, x를 제거한다.
  3. check: 리스트 S에 x가 존재한다면 “1”을, 아니라면 “0”을 출력한다.
  4. toggle: 리스트 S에 x가 존재한다면, x를 제거하고, 아니라면 x를 삽입한다.
  5. all: 리스트 S를 비운 뒤, S의 원소를 1~20까지의 수로 다시 채운다.
  6. empty: 리스트 S를 비운다.

ArrayList를 공집합으로 두고 연산을 수행하면 되니 간단하다.

다만, 유의할 점은 모든 명령이 “명령 x”로 들어오는게 아니다. all이나 empty의 경우 x가 없는 공백없는 문자열로 들어오게 되니 x가 항상 입력으로 주어지는 것으로 판단하면 안된다.


문제 풀이를 위해 작성한 코드는 아래와 같다.

작성코드


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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import java.io.*;
import java.util.*;

class Main {    



    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int M = Integer.parseInt(br.readLine());

        ArrayList<Integer> S = new ArrayList<>();

        for(int i=0; i<M; i++) {
            
            String[] input = br.readLine().split(" ");

            String cmd = input[0];
            int x = 0;
            
            if(input.length > 1) {
                x = Integer.parseInt(input[1]);
            }
            
            switch(cmd) {

                case "add":
                    if(!S.contains(x)) S.add(x);
                    break;

                case "remove":
                    if(S.contains(x)) S.remove(S.indexOf(x));
                    break;

                case "check":
                    if(S.contains(x)) bw.write("1"+"\n");
                    else if(!S.contains(x)) bw.write("0"+"\n");
                    break;

                case "toggle":
                    if(S.contains(x)) S.remove(S.indexOf(x));
                    else if(!S.contains(x)) S.add(x);
                    break;

                case "all":
                    S.clear();
                    for(int j=1; j<=20; j++) {
                        S.add(j);
                    }
                    break;

                case "empty":
                    S.clear();
                    break;

                default:
                    break;

            }

        }
        
        bw.close();
        br.close();
    }    

}

출처


  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.