2023. 10. 31. 17:17, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/42747#fn1
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> v) {
int answer = 0;
for(int i=v.size();i>=0;i--){
int cnt=0;
for(auto t: v) {
if(t>=i) cnt++;
}
if(cnt>=i) answer=max(answer,i);
}
return answer;
}
예를들어서, 전체 논문이 6편이면, 그중 6편의 논문이 조건을 만족하는지, , 5편의 논문이 조건을 만족하는지, 4편의 논문이 조건을 만족하는지 ... 등등 테스트해보면서 answer의 값을 갱신시켰다.
굉장히 생각하기에 까다로운 문제였다. 문제부터 '이상' 과 '이하' 라는 단어가 겹쳐지는 구간이 있게 사용되어서 더 헷갈렸다.
다른 사람의 풀이를 보니까 아주 간결하게 딱 정답을 찾아서 멈출 수 있게 풀이를 작성한 코드가 있어서 첨부해본다.
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> citations) {
sort(citations.begin(), citations.end(), greater<int>());
for (int i = 0; i < citations.size(); ++i) {
if (citations[i] <= i) {
return i;
}
}
return citations.size();
}
sort()를 어따가 쓸까 싶었는데, 이렇게 해놓으면 큰것부터 차례대로 보면서 값을 찾아내려가다가 발견하면 멈출 수 있다.
성능 측면에서는, sort()를 수행하는 부분때문에, 그렇게 큰 차이가 발생할것은 아니라고 보지만,
그래도 굉장히 절차적으로 진행하다가 원하는 값이 나왔을때 멈춘다는 부분에서 매력적인 코드라고 생각한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 lv 1. 42840 c++ 모의고사 (0) | 2023.11.01 |
---|---|
프로그래머스 lv 1. 86491 c++ 최소직사각형 (0) | 2023.11.01 |
프로그래머스 lv 2. 42746 c++ 가장 큰 수 (0) | 2023.10.31 |
프로그래머스 lv 1. 42748 c++ K번째수 (0) | 2023.10.31 |
프로그래머스 lv 2. 42583 c++ 다리를 지나는 트럭 **다시 풀어보기** (0) | 2023.10.30 |
Comments, Trackbacks