풀이
- 처음에는 Map을 사용해서 해당 인물에 대한 상태 변화를 체크 후
- Key를 배열로 만든 뒤 정렬해서
- enter의 경우를 찾아 배열에 추가 후
- 결과를 뒤집어서 출력하여 해결
- 다만 Set으로 하는 방법도 하고 싶어서
- enter일 땐 추가, 아닐 땐 제거하고,
- 이후에 Set를 List로 변환 뒤, 내림차순 정렬하여 해결
import java.io.*;
import java.util.*;
public class _7785 {
// 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;
// int N = Integer.parseInt(br.readLine());
// Map<String, String> dic = new HashMap<>();
// for (int i=0; i<N; i++) {
// st = new StringTokenizer(br.readLine());
// String k = st.nextToken();
// String v = st.nextToken();
// dic.put(k,v);
// }
// List<String> result = new ArrayList<>();
// List<String> dic_li = new ArrayList<>(dic.keySet());
// Collections.sort(dic_li);
// for (int i=0; i<dic_li.size(); i++) {
// if (dic.get(dic_li.get(i)).equals("enter")) result.add(dic_li.get(i));
// }
// Collections.reverse(result);
// for (String name: result) bw.write(name+"\n");
// bw.flush();
// }
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;
int N = Integer.parseInt(br.readLine());
Set<String> s_li = new HashSet<>();
while (N>0) {
st = new StringTokenizer(br.readLine());
String nm = st.nextToken();
String cmd = st.nextToken();
if (cmd.equals("enter")) s_li.add(nm);
else s_li.remove(nm);
N--;
}
List<String> result = new ArrayList<>(s_li);
Collections.sort(result, Collections.reverseOrder());
for (String name: result) bw.write(name+"\n");
bw.flush();
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 13241번] 최소공배수 (0) | 2024.11.12 |
---|---|
[백준, 자바, 1620번] 나는야 포켓몬 마스터 이다솜 (1) | 2024.11.12 |
[백준, 자바, 14425번] 문자열 집합 (0) | 2024.11.11 |
[백준, 자바, 19532번] 수학은 비대면강의입니다 (0) | 2024.11.11 |
[백준, 자바, 1977번] 완전제곱수 (0) | 2024.11.10 |