
해시를 사용하는 간단한 문제로 풀기 전 고민했던 부분은 3가지가 있었다.
1. 문자열을 분리해서 이름과 출입 여부에 관한 문자열로 나눠야한다.
2. Set을 통해 동일한 이름의 직원이 중복해서 들어가지 않도록하며, 출입 여부에 따라 삽입, 삭제 해야한다.
3. 출력시, 알파벳 기준 내림차순으로 정렬해야한다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Set<String> employees = new TreeSet<>(Collections.reverseOrder());
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String temp = br.readLine();
String[] employ = temp.split(" ");
if(employ[1].equals("enter")){
employees.add(employ[0]);
}else{
employees.remove(employ[0]);
}
}
for (String employee : employees) {
System.out.println(employee);
}
}
}
Set<String> employees = new TreeSet<>(Collections.reverseOrder());
Collections.reverseOrder()를 사용하여 내림차순으로 저장되도록 한다. String[] employ = temp.split(" ");
if(employ[1].equals("enter")){
employees.add(employ[0]);
}else{
employees.remove(employ[0]);
}
// 방법 1
for (String employee : employees) {
System.out.println(employee);
}
// 방법 2
Iterator<String> iter = employees.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
Iterator 타입으로 변환 후에 hasNext() 즉, 다음 요소가 있을 때까지 반복하며 출력한다. 이전 문제에서 Set의 중요성에 대해서 좀 알 수 있었는데 TreeSet과 정렬 순서를 바꾸는 등, 이와 같은 것을 숙지해두고 실전 상황에서 바로 적용시킬 수 있도록 해야할 것 같다.