[백준] 7785번 - 회사에 있는 사람 [Java][C++]
[백준] 7785번 - 회사에 있는 사람 [Java][C++]
1. 문제 풀이
회사에 들어온 사람은 "enter", 회사에서 나간 사람은 "leave" 로 주어지는 문제로 회사에 들어왔으면 집합에 넣고, 회사에서 나갔으면 집합에서 제거해주면 된다. 회사에 있는 사람의 이름을 사전 순의 역순으로 출력해야 해서 트리셋을 집합으로 활용했고 역순으로 설정해줬다.
2. 코드
1. 트리를 사용한 집합과 맵 [Java]
Collections.reverseOrder() 를 활용해서 역순 정렬을 해줬다.
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<>(Collections.reverseOrder());
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
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();
}
}
2. 트리를 사용한 집합과 맵 [C++]
greater<string> 를 활용해서 역순 정렬을 해줬다.
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(false);
cin.tie(nullptr);
set<string, greater<string>> st;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string name, type;
cin >> name >> type;
if (type == "enter") {
st.insert(name);
} else {
st.erase(name);
}
}
for (const string& s : st) {
cout << s << '\n';
}
}
3. 풀이 정보
1. 트리를 사용한 집합과 맵 [Java]
| 언어 | 시간 | 메모리 | 코드 길이 |
|---|---|---|---|
| Java 11 | 484 ms | 42156 KB | 891 B |
2. 트리를 사용한 집합과 맵 [C++]
| 언어 | 시간 | 메모리 | 코드 길이 |
|---|---|---|---|
| C++ 17 | 68 ms | 9948 KB | 461 B |
This post is licensed under CC BY 4.0 by the author.