반응형
오랜만에 푸는 문제이기 때문에
별로 워밍업이 되지 않을까 하는 문제를 가져왔다
(풀어봐야알겠지만..)
처음에 들어오는 값은 학생 수(N) 이고 두번째 들어오는 값은 상을 받는 사람들(k)일 것이다.
그다음에는 점수들이 쭉 나열이 된다.
점수들을 오름차순으로 저장하고 k등 한 사람을 return 해주면 될 것이다.
점수가 중복이 되면 어떡하지..?라는 고민이 들지만..
누가 상을 받냐? 가 아니라 점수의 커트라인이 몇이냐 이기 때문에 상관없을 것 같다.
list를 이용하여 한번 코드를 짜봐야겠다.
분명 맞게 짠거같은데..게속 결과가 0만 나왔다...
k번째까지 출력해봐도 0만 계혹 나왔다.
iterator의 오류일까 싶어서 봤지만 아무리 봐도 맞았다.
원인은..!
list<int> score(N); 으로 초기화를 해준 것이었다.
저런식으로 초기화를 해주면 N개 만큼 0이 들어가게되고
sort하고 출력한 결과 가장 작은 0만 출력된 것이엇다..ㅋㅋ
STL에 대한 능숙도가 낮은 탓이었다.
자신만만하게 답을 등록했는데..? 틀렸다..?
진짜 뭐지 진짜 뭐지 하다가 알아냈다.
오름차순으로 하면 낮은 것부터 나열되기 때문에
높은것부터 k등을 찾기 위해서는 마지막에서 k번 -- 해줘야한다.
#include <iostream>
#include <list>
using namespace std;
int main() {
int N, k,a;
cin >> N;
cin >> k;
list<int> score;
list<int>::iterator iter;
for (int i = 0;i < N; i++) {
cin >> a;
score.push_back(a);
}
score.sort();
iter = score.end();
for (int i = 0;i < k; i++) {
iter--;
}
cout << *iter;
return 0;
}
반응형
'BOJ > [ BOJ ] C++' 카테고리의 다른 글
[ C++ ] #9184 신나는 함수 실행 (0) | 2022.11.24 |
---|---|
[ C++ ] #24416 알고리즘 수업 - 피보나치 수 1 (0) | 2022.11.22 |
[ C++ ] #5397 ( 키로커 ) (0) | 2022.02.27 |
[ C++ ] #3273 ( 두 수의 합 ) (0) | 2022.02.21 |
[ C++ ] #1475 ( 방 번호 ) (0) | 2022.02.21 |