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

yseo14·2025년 1월 10일

코딩테스트 대비

목록 보기
39/88


문제링크

풀이1

hashSet을 사용해서 출입여부가 enter이면 추가하고, leave이면 삭제한다.
그 후 남아있는 값들을 ArrayList에 저장 후 정렬한다.
역순으로 출력하면 정답을 얻을 수 있다.

코드1

package BOJ;

import java.io.*;
import java.util.*;


public class sol7785 {
    static int n;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        HashSet<String> record = new HashSet<>();
        n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String check = st.nextToken();
            if (check.equals("enter")) {
                record.add(name);
            } else if (check.equals("leave")) {
                record.remove(name);
            }
        }

        ArrayList<String> nameList = new ArrayList<>(record);
        Collections.sort(nameList);

        for (int i =nameList.size()-1; i >= 0; i--) {
            sb.append(nameList.get(i)).append("\n");
        }
        System.out.println(sb);
    }
}

풀이2

hashMap에 저장한다.
그렇게 되면 같은 사람의 이름이 입력되면 출입상태가 update되게 된다.
hashMap.ketSet()을 ArrayList에 저장하고 역순으로 정렬한다.
이제 출입상태가 enter인 직원들의 이름을 출력해주면 된다.

코드2

package BOJ;

import java.io.*;
import java.util.*;

public class sol7785_2 {
    static int n;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        HashMap<String, String> record = new HashMap<>();
        n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            String check = st.nextToken();
            record.put(name, check);
        }

        ArrayList<String> nameList = new ArrayList<>(record.keySet());
        nameList.sort(Comparator.reverseOrder());

        for (int i = 0; i < nameList.size(); i++) {
            if (record.get(nameList.get(i)).equals("enter")) {
                sb.append(nameList.get(i)).append("\n");
            }
        }
        System.out.println(sb);
    }
}
profile
like the water flowing

0개의 댓글