https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
접근 :
- 출입 기록 수 n 을 입력받는다.
- 한줄의 출입한 사람의 이름이 입력과 enter / leave 가 입력된다.
- 현제 회사에 있는 사람의 이름이 알파벳 역순으로 출력된다.
- 출입한 사람의 이름을 map에 key로 등록하고 value로 출입 여부가 기록된다.
- map 에 value가 enter 인 사람을 배열로 꺼내고 정렬을 한 후 화면에 출력한다.
코드 구현 :
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
public class Main {
public static void main(String[] srgs) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] inputs;
HashMap<String, String> inout_list = new HashMap<>();
String[] temp_result = new String[n];
int flag = 0;
StringBuilder sb = new StringBuilder();
// 사람이름 및 출입내역 map으로 받기
for (int i = 0; i < n; i++) {
inputs = br.readLine().split(" ");
inout_list.put(inputs[0], inputs[1]);
}
// 출입 결과가 enter 일 경우 array에 저장
for (String key : inout_list.keySet()) {
if (inout_list.get(key).equals("enter")) {
temp_result[flag++] = key;
}
}
// 배열 전체를 정렬하면 null 이 포함되어 있으므로 이름이 있는 배열 길이 만큼 자르기
String[] result = new String[flag];
System.arraycopy(temp_result, 0, result, 0, flag);
//알파벳 내림차순으로 정렬
Arrays.sort(result, Comparator.reverseOrder());
//결과 출력
for (String str : result) {
sb.append(str).append("\n");
}
System.out.println(sb);
br.close();
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 백준 14888 연산자 끼워넣기_브루트포스 (0) | 2024.05.18 |
---|---|
[JAVA] 백준 4673 셀프 넘버_브루트포스 (0) | 2024.02.04 |
[JAVA] 백준 14215 세 막대_기하: 직사각형과 삼각형 (0) | 2023.04.13 |
[JAVA] 백준 2903 중앙 이동 알고리즘_일반 수학1 (0) | 2023.04.13 |
[JAVA] 백준 2720 세탁소 사장 동혁_일반 수학1 (0) | 2023.04.13 |