hashSet을 사용해서 출입여부가 enter이면 추가하고, leave이면 삭제한다.
그 후 남아있는 값들을 ArrayList에 저장 후 정렬한다.
역순으로 출력하면 정답을 얻을 수 있다.
package BOJ;
import java.io.*;
import java.util.*;
public class sol7785 {
static int n;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashSet<String> record = new HashSet<>();
n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String check = st.nextToken();
if (check.equals("enter")) {
record.add(name);
} else if (check.equals("leave")) {
record.remove(name);
}
}
ArrayList<String> nameList = new ArrayList<>(record);
Collections.sort(nameList);
for (int i =nameList.size()-1; i >= 0; i--) {
sb.append(nameList.get(i)).append("\n");
}
System.out.println(sb);
}
}
hashMap에 저장한다.
그렇게 되면 같은 사람의 이름이 입력되면 출입상태가 update되게 된다.
hashMap.ketSet()을 ArrayList에 저장하고 역순으로 정렬한다.
이제 출입상태가 enter인 직원들의 이름을 출력해주면 된다.
package BOJ;
import java.io.*;
import java.util.*;
public class sol7785_2 {
static int n;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
HashMap<String, String> record = new HashMap<>();
n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String check = st.nextToken();
record.put(name, check);
}
ArrayList<String> nameList = new ArrayList<>(record.keySet());
nameList.sort(Comparator.reverseOrder());
for (int i = 0; i < nameList.size(); i++) {
if (record.get(nameList.get(i)).equals("enter")) {
sb.append(nameList.get(i)).append("\n");
}
}
System.out.println(sb);
}
}