상근이는 소프트웨어 회사에서 일하는데, 회사의 특징 중 하나는 자유로운 출퇴근 시간입니다. 그래서 직원들은 언제든지 회사에 출근하고 퇴근할 수 있습니다. 상근이는 회사의 출입 로그를 분석하여 현재 회사에 있는 직원들을 찾고자 합니다.
주어진 로그에는 각 직원의 이름과 출입 여부가 기록되어 있습니다. "enter"인 경우는 출근이고 "leave"인 경우는 퇴근입니다.
주어진 로그를 기반으로 현재 회사에 있는 직원들을 사전 순으로 역순으로 출력합니다.
4
Baha enter
Askar enter
Baha leave
Artem enter
Copy code
Askar
Artem
import java.util.*;
public class CurrentEmployees {
public static List<String> getCurrentEmployees(List<String> logs) {
Map<String, Boolean> employees = new HashMap<>(); // 직원의 출입 여부를 저장하는 맵
for (String log : logs) {
String[] parts = log.split(" "); // 로그에서 이름과 출입 행동을 추출
String name = parts[0];
String action = parts[1];
if (action.equals("enter")) {
employees.put(name, true); // 출근한 경우 맵에 이름과 true로 설정
} else if (action.equals("leave")) {
employees.put(name, false); // 퇴근한 경우 맵에 이름과 false로 설정
}
}
List<String> currentEmployees = new ArrayList<>();
for (Map.Entry<String, Boolean> entry : employees.entrySet()) {
if (entry.getValue()) { // 현재 회사에 있는 직원을 찾음
currentEmployees.add(entry.getKey());
}
}
Collections.sort(currentEmployees, Collections.reverseOrder()); // 사전 순으로 역순으로 정렬
return currentEmployees;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 로그 수
scanner.nextLine(); // 개행 문자 처리
List<String> logs = new ArrayList<>();
for (int i = 0; i < n; i++) {
logs.add(scanner.nextLine()); // 출입 로그 추가
}
List<String> result = getCurrentEmployees(logs);
for (String employee : result) {
System.out.println(employee);
}
}
}
getCurrentEmployees 메서드에서는 각 직원의 출입 상태를 저장하기 위해 Map<String, Boolean> 타입의 맵을 선언합니다.
for 반복문을 통해 주어진 로그를 순회합니다.
각 로그는 공백을 기준으로 분리되어 직원의 이름과 출입 상태로 나뉘어집니다.
해당 정보를 맵에 저장합니다. 출근 상태인 경우에는 true, 퇴근 상태인 경우에는 false로 기록됩니다.
맵을 순회하여 현재 회사에 있는 직원들을 찾습니다.
출근 상태인 직원들을 리스트에 추가합니다.
찾은 직원들을 사전 순으로 역순으로 정렬합니다.
이후, 결과 리스트를 반환합니다.
입력을 받고, 주어진 로그를 리스트에 추가합니다.
getCurrentEmployees 메서드를 호출하여 결과를 받고, 출력합니다.
