[백준] 7785 회사에 있는 사람 - Java

minhyeok·2024년 2월 4일
1

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();
    }

}

1개의 댓글

comment-user-thumbnail
2024년 2월 12일

기막힌 풀이군여

답글 달기