패스트터틀

(Baekjoon) GreedyAlgorithm - (10) 신입사원 본문

Algorithm/baekjoon

(Baekjoon) GreedyAlgorithm - (10) 신입사원

SudekY 2019. 11. 10. 15:45

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

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성적, 면접 성적의 순위가 공백을 사이에 두고 한 줄에 주어진다. 두 성적 순위는 모두 1위부터 N위까지 동석차 없이 결정된다고 가정한다.

www.acmicpc.net

시간초과 문제로 골머리를 앓다가

너무 머리를 복잡하게 해서 생겼다는것을 알고 다시 고친문제다

시간 문제는 오름차순을 없애버리고 그저 입력받을때 바로 순위를 정해주면 해결되고

오름차순에서 비교문제는 전부다 할필요없고

최댓값,최솟값구하기 알고리즘과 비슷하게하고 count를 세주면된다.

 

package GreedyAlgorithm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _1946 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()), N, apply[][];
        int count[] = new int[T], min, rank;
        String s[];

        for (int i = 0; i < T; i++) {
            N = Integer.parseInt(br.readLine());
            apply = new int[N][2];
            for (int j = 0; j < N; j++) {
                s = br.readLine().split(" ");
                rank = Integer.parseInt(s[0]) - 1;
                apply[rank][0] = rank;
                apply[rank][1] = Integer.parseInt(s[1]);
            }
            count[i] = 1;
            min = apply[0][1];
            for (int j = 1; j < apply.length; j++) {
                if (min > apply[j][1]) {
                    min = apply[j][1];
                    count[i]++;
                }
            }
        }

        for (int i = 0; i < count.length; i++) {
            System.out.println(count[i]);
        }

    }
}

 

 

 

 

 

 

 

백준문제풀이Github : 

https://github.com/sdk0213/baekjoon-study

 

sdk0213/baekjoon-study

solve a baekjoon question. Contribute to sdk0213/baekjoon-study development by creating an account on GitHub.

github.com

 

Comments