https://www.acmicpc.net/problem/7785
처음에는 그냥 단순하게 ArrayList로 만들어 enter면 넣고 leave면 빼는 형식으로 구현했다.
그 결과는..
오열
아마 List로 할 시에는 너무 오래걸려서 그랬을까..? 예외 상황을 찾아보려고 했는데 실패했다 ㅠ
그래서 HashMap으로 구현하여, 이미 가지고 있는 name이면 제거하고, 아니라면 넣었다.
굳이 cmd(enter 또는 leave)로 비교할 필요가 없어 위와 같이 구현하였다.
그 뒤 출력할 list를 위해 새로운 ArrayList를 만들어서 넣어주고 이름을 사전의 역순으로 출력하기 위해 Collections.sort에서 reverseOrder를 통해 역순으로 정렬하였다.
import java.util.*;
import java.io.*;
public class prob7785 {
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());
HashMap<String,String> map = new HashMap<>();
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
String cmd = st.nextToken();
if (map.containsKey(name)) {
map.remove(name);
} else {
map.put(name, cmd);
}
}
List<String> list = new ArrayList<>(map.keySet());
Collections.sort(list, Collections.reverseOrder());
for (int i = 0; i < list.size(); i++) {
bw.write(list.get(i) + "\n");
}
bw.flush();
}
}
기막힌 풀이군여