

이 문제는 출입기록의 수를 입력받고, 그 수 만큼 사원의 이름과 출입기록을 입력하고 최종적으로 회사에 남아있는 사원의 이름을 사전순의 역순으로 출력하는 문제입니다.
입력으로 출입기록의 수를 입력받습니다. 이후, 사원의 이름과 출퇴근 log를 입력받습니다.
남아있는 사원의 이름을 사전순의 역순으로 출력합니다.
연산을 위해 HashMap의 containsKey(), remove(), put(), KeySet() 메서드를 사용해주었습니다.
HashMap의 메소드를 정리한 표는 아래와 같습니다.
| method | 기능 |
|---|---|
| containsKey() | 특정 키가 HashMap에 존재하는지 확인 |
| remove() | 특정 키와 그에 매핑된 값을 HashMap에서 제거 |
| put() | 키와 값을 HashMap에 추가하거나, 이미 존재하는 키의 값을 업데이트 |
| keySet() | 모든 키를 포함하는 Set을 반환 |
| values() | 모든 값을 포함하는 Collection을 반환 |
| entrySet() | 모든 키-값 쌍을 포함하는 Set을 반환 |
| get() | 특정 키에 매핑된 값을 반환 |
| isEmpty() | HashMap이 비어 있는지 확인 |
| size() | HashMap의 키-값 쌍의 개수를 반환 |
import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, String> map = new HashMap<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String log = st.nextToken();
if (log.equals("enter")) {
map.put(name, log);
} else if (log.equals("leave") {
map.remove(name);
}
}
List<String> keys = new ArrayList<>(map.keySet());
Collections.sort(keys, Collections.reverseOrder());
for (int j = 0; j < keys.size(); j++) {
System.out.println(keys.get(j));
}
}
}
