본문 바로가기

알고리즘/백준

[백준] 7785 - 회사에 있는 사람 (JAVA/ 자바)

반응형

7785번 문제

 

수많은 시간초과와 틀렸습니다를 거쳐서 해결하였다...

 

❗️❗️ 틀린 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;

public 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));
    int N = Integer.parseInt(br.readLine());

    HashMap<String, String> map = new HashMap<String, String>();
    
    for(int i=0; i<N; i++){
        StringTokenizer st = new StringTokenizer(br.readLine());
        String name = st.nextToken();
        String sit = st.nextToken();
        
        if(map.containsValue("leave")){
            map.remove(name);
        }else{
            map.put(name, sit);
        }
    }
    ArrayList<String> list = new ArrayList<String>();
    for(String name : map.keySet()){
        list.add(name);
    }
    Collections.sort(list, Collections.reverseOrder());
    for(int i=0; i<list.size(); i++){
       bw.write(list.get(i) + "\n");
    }
    br.close();
    bw.flush();
    bw.close();
    
}
}

우선 나는 map.containsValue("leave")를 이용해서 문제를 풀려고 했다. 근데 그게 생각보다 시간을 많이 잡아먹는 코드였는지 시간초과 에러가 발생하였다.

 

 

그래서 결국 그 부분을 sit.equals("leave")로 바꾸어 해결하였다.

🤓해결한 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.StringTokenizer;

public 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));
    int N = Integer.parseInt(br.readLine());

    HashMap<String, String> map = new HashMap<String, String>();
    
    for(int i=0; i<N; i++){
        StringTokenizer st = new StringTokenizer(br.readLine());
        String name = st.nextToken();
        String sit = st.nextToken();
        
        if(sit.equals("leave")){
            map.remove(name);
        }else{
            map.put(name, sit);
        }
    }
    ArrayList<String> list = new ArrayList<String>();
    for(String name : map.keySet()){
        list.add(name);
    }
    Collections.sort(list, Collections.reverseOrder());
    for(int i=0; i<list.size(); i++){
       bw.write(list.get(i) + "\n");
    }
    br.close();
    bw.flush();
    bw.close();
}
}

 

다른 분들 코드보니 for문 돌려서 list.add() 안하고

ArrayList<String> list = new ArrayList<String>(map.keySet());

으로 바로 값을 넣을 수 있는 것 같다.....

반응형