Post

[BaekJoon] #7785 - 회사에 있는 사람 [Java][C++]

[BaekJoon] #7785 - 회사에 있는 사람 [Java][C++]

문제 링크


1. 아이디어

회사에 들어온 사람은 "enter", 회사에서 나간 사람은 "leave"로 주어지는 문제로 회사에 들어왔으면 집합에 넣고, 회사에서 나갔으면 집합에서 제거하면 된다. 회사에 있는 사람의 이름을 사전 순의 역순으로 출력해야 해서 트리셋을 집합으로 활용했고 역순으로 설정했다.


2. 복잡도

접근시간공간
풀이$O(N \log N)$$O(N)$

($N$ = 입력값 n)


3. 코드

풀이 [Java][C++]

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
import java.io.*;
import java.util.*;

public 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));
        StringTokenizer st;

        Set<String> set = new TreeSet<>(Comparator.reverseOrder());

        int n = Integer.parseInt(br.readLine());
        while (n-- > 0) {
            st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String type = st.nextToken();

            if (type.equals("enter")) {
                set.add(name);
            } else {
                set.remove(name);
            }
        }

        for (String name : set) {
            bw.write(name);
            bw.newLine();
        }

        bw.flush();
    }
}
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
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    set<string, greater<>> st;

    int n;
    cin >> n;

    while (n--) {
        string name, type;
        cin >> name >> type;

        if (type == "enter") {
            st.insert(name);
        } else {
            st.erase(name);
        }
    }

    for (auto& name : st) {
        cout << name << '\n';
    }
}

This post is licensed under CC BY 4.0 by the author.