https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Map map = new HashMap();
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
map.put(input[0], input[1]);
}
Iterator<Map.Entry<String, String>> itr = map.entrySet().iterator();
List<String> list = new ArrayList<>();
while (itr.hasNext()) {
Map.Entry<String, String> entry = itr.next();
if(entry.getValue().equals("enter")) {
list.add(entry.getKey());
}
}
Collections.sort(list, Collections.reverseOrder());
for (String s : list) {
System.out.println(s);
}
}
}
Map을 사용하여 문제를 풀었다.
이유는 key에는 사람 이름을 넣고, value에는 출퇴근 여부를 넣기 위해서이다.
물론 배열로 작성하여 문제를 풀 수 있지만 그러기에는 손이 너무 많이 간다.
Iterator<Map.Entry<String, String>> itr = map.entrySet().iterator();
Map을 사용하면 순차적으로 요소에 있는 key와 value에 접근하지 못한다.
따라서 Iterator를 사용하여 Map 요소들을 순회하였다.
entrySet() 은 Map 객체에 있는 모든 키-값 쌍들을 Set 형태로 반환시켜 준다.
interator()은 Set이 가지고 있는 인터페이스이고, Set에 있는 요소들을 순회할 수 있는 Iterator 객체를 반환시켜준다.
Collections.sort(list, Collections.reverseOrder());
Collections 는 컬렉션(리스트, 세트, 맵 등)을 다루는 유틸리티 클래스이다.
sort를 사용해서 정렬을 할 수 있고, Collections.reverseOrder()를 통해 역순으로 정렬 가능하다.