링크 : www.acmicpc.net/problem/1946
처음에 문제를 주의깊게 읽지않아 해석을 잘못했다.
입력되는 값들은 '점수'가 아니라, '순위'이다. 즉, 숫자가 적을수록 유리한 입지에 있다는 뜻이다.
문제를 잘못해석한 탓에 몇 차례 실수를 겪었다.
문제를 푼 방법은 다음과 같다.
(1) 오름차순으로 나열한다. 이렇게해서 서류심사는 정렬이 되었으므로, 이제 면접심사(두 번째 값)만 비교하면 된다.
(2) v[0]에 위치한 사람은 무조건 합격이므로, 정답값은 1부터 시작한다.
(3) v[1]부터 마지막사람까지 비교를 시작한다.
이때 가장 높은 순위(즉, 가장 작은 면접심사의 결과값을 가진 사람)와 비교해서 해당 위치의 면접심사값보다 작으면 정답값을 상승시킨다.
3번의 과정을 위해, 비교값이 바뀔때마다 제일 높은 등수와 누가 더 숫자가 작은지 비교하는 if문을 세웠다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n = 0, temp = 0, a = 0, b = 0, ans = 1, big_num=0;
vector<pair<int,int>> v;
cin >> n;
while(n>0){
n--;
cin >> temp;
for(int i=0; i<temp; i++){
cin >> a >> b;
v.push_back(make_pair(a,b));
}
sort(v.begin(), v.end());
big_num = v[0].second;
for(int i=1; i<temp; i++){
if(v[i].second<big_num)ans++;
if(v[i].second<big_num) big_num = v[i].second;
}
cout << ans << "\n";
v.clear();
ans = 1;
}
return 0;
}
처음에는 문제해석을 잘못해서 무조건 앞 사람과 점수를 비교하다 틀렸고,
그 다음에는 이중 for문으로 접근했다가 시간초과가 나서 틀렸다.
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
#3036번 링 (C++) (0) | 2020.11.03 |
---|---|
#2609번 최대공약수와 최대공배수 (C++) (0) | 2020.11.02 |
#11399번 ATM (C++) (0) | 2020.10.30 |
#1931번 회의실배정 (C++) (0) | 2020.10.30 |
#11047번 동전 0 (C++) (0) | 2020.10.28 |