백준 - 1946번 : 신입 사원(C++)

RoundAbout·2024년 5월 25일
0

BaekJoon

목록 보기
71/90

풀이 방법 : 정렬

입력으로 주어진 두 성적이 다른 지원자와 비교했을 때 두 성적이 모두 다른 사람보다 낮은 케이스가 있다면 그 사람은 선발될 수 없다.

입력으로 주어진 등수 둘 중 하나를 기준으로 정렬해둔다면, 나머지 다른 등수만 비교해주면 N번 반복만으로 선발할 수 있는 인원수를 구할 수 있다.

어차피 겹치는 등수가 없다고 했기 때문에 정렬 연산을 안하기 위해 그냥 입력으로 받은 서류심사 성적을 Idx로 사용하여 vector에 저장해주었다.
여기에서 1번 인덱스에 오는 사람은 서류에서는 1등이므로 적어도 하나는 다른 사람들보다 앞서기에 선발 될 수 있다.

따라서 1번 인덱스의 면접 등수를 기준으로 2번인덱스부터 비교해나가면 된다.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    int T;
    cin >> T;

    while (T > 0)
    {
        --T;
        int N;
        cin >> N;

        vector<int> vecPlace(N + 1);
        for (int i = 0; i < N; ++i)
        {
            int Test, Interview;
            cin >> Test >> Interview;

            vecPlace[Test] = Interview;
        }

        int Cnt = N;
        int MinPlace = vecScore[1];
        for (int i = 2; i <= N; ++i)
        {
            if (MinPlace < vecPlace[i])
            {
                --Cnt;
            }

            MinPlace = min(MinPlace, vecPlace[i]);
        }

        cout << Cnt << '\n';
    }
}

profile
게임하고 피자 좋아함

0개의 댓글

관련 채용 정보