[백준] 7785번 - ArrayList? HashSet? (java)

팥빵·2025년 9월 23일

Baekjoon

목록 보기
36/49

현재 회사에 남아있는 사람을 이름 내림차순으로 정렬하는 문제이다.

처음엔 ArrayList로 회사 사람들의 출입을 관리하고자 설계했었다.

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

class Main{
    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());
        List<String> list = new ArrayList<>();
        for(int i=0; i<n; i++){
            st = new StringTokenizer(br.readLine(), " ");
            String name = st.nextToken();
            String offer = st.nextToken();
            if(offer.equals("enter")){
                list.add(name);
            }else if(offer.equals("leave")){
                list.remove(name);
            }
        }
        
        Collections.sort(list, (s1, s2) -> s2.compareTo(s1) );
             
        for(String s : list){
            bw.write(s + "\n");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

시간 초과

HashSet과 달리 ArrayList는 순서가 존재하기 때문에
remove로 탐색할 때 순서대로 탐색하기 때문에
시간이 오래 걸리게 된다.

그러므로 순서를 상관하지 않는 HashSet으로
회사에 남아있는 사람들을 모은 후
ArrayList로 바꾼 후 정렬하면 된다.

위 정보를 바탕으로 설계한 코드는 다음과 같다.


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

class Main{
	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());
        HashSet<String> set = new HashSet<>();
        
        for(int i=0; i<n; i++){
        	st = new StringTokenizer(br.readLine(), " ");
            String name = st.nextToken();
            String rest = st.nextToken();
            if(rest.equals("enter")){
            	set.add(name);
            }else if(rest.equals("leave")){
            	set.remove(name);
            }
        }
        
        List<String> list = new ArrayList<>(set);
        Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
        
        for(String s : list){
        	bw.write(s + "\n");
        }
        br.close();
        bw.flush();
        bw.close();
    }
}

맞았습니다!!

profile
반갑습니다

0개의 댓글