회사에 출입한 사람들 중
아직 회사에 남아 있는 사람을 찾는 것이 목표이다
출입 기록 수
출입한사람 enter or leave
아직 회사에 남아 있는 사람을 사전 역순으로
한 줄에 한 명씩 이름 출력
HashSet을 쓰려면 enter 한 사람은 그 다음 기록이 무조건 leave라는 보장이 있어야 하는데
그런 조건은 딱히 안주어져서 다른 자료구조를 써야 한다고 생각했다
두 가지 값을 넣으면서 hash가 가능한건 HashMap밖에 모르는데 HashMap을 쓰게되면 정렬 할 때 key와 value 각각을 List로 빼와서 정렬하는 수 밖에 없었다
그러다가 발견한 것이 TreeMap인데 생성자에 comparator를 지정해주면 key, value쌍을 put할 때 자동 정렬이 된다!!
그리고 map.entrySet()으로 key, value를 묶은 객체를 빼올수 있다는것도 알게됐다
//회사에 있는 사람
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Comparator<String> comparator = (s1, s2)-> s2.compareTo(s1);
Map<String, String> employees = new TreeMap<>(comparator);
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String name = st.nextToken();
String state = st.nextToken();
if(!employees.containsKey(name))
employees.put(name, state);
else {
employees.remove(name);
employees.put(name, state);
}
}
for(Map.Entry<String, String> person : employees.entrySet()) {
if(person.getValue().equals("enter")) {
bw.write(person.getKey() + "\n");
}
}
bw.flush();
bw.close();
br.close();
}
}