가희의자기개발블로그

1946번 백준 <신입 사원> 그리디 알고리즘 본문

프로그래밍 언어/알고리즘

1946번 백준 <신입 사원> 그리디 알고리즘

가희gahui 2020. 7. 11. 13:40
반응형

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성��

www.acmicpc.net

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

public class GreedyAlgorithm02 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()); //테스트 케이스 수

        for(int i = 0; i<T; i++ ){
            int N = Integer.parseInt(br.readLine()); //지원자 수
            int [][] score = new int[N][2]; //각 지원자의 점수
            int count = 1;

            for(int j= 0; j<N; j++){
                String line = br.readLine();
                int pos = line.indexOf(" ");
                score[j][0] = Integer.parseInt(line.substring(0,pos));
                score[j][1] = Integer.parseInt(line.substring(pos+1));
            }

            Arrays.sort(score, new Comparator<int[]>() {
                @Override
                public int compare(int[] o1, int[] o2) {
                    return o1[0] - o2[0];
                }
            });

            int min = score[0][1];
            for(int j = 1; j<N; j++){
                if(score[j][1] == 1){
                    count++;
                    break;
                }
                if(score[j][1] < min){
                    count++;
                    min = score[j][1];
                }
            }
            System.out.println(count);
        }
    }
}

자꾸 시간 초과 에러가 나서 내 로직이 뭐가 잘못되었는지 몇일간 고민하느라 푸는데 오래걸린 문제!!

 

사실 그 문제는 입력 시간이 너무 길어져서 나는 시간 초과 문제 였다. 

입력하는 함수로 Scanner함수를 사용하였는데, 백준에서 찾아보니 Scanner같은 경우 입력값이 많아질 경우, 시간이 더 오래걸린다고 한다. 

BufferedReader로 바꿔주니 잘 통과 되었다.

반응형
Comments