그래서 점심 메뉴는 무엇이었냐.. 바로 제육덮밥 & 냉면이었는데요...
메뉴의 이름 자체는 상당히 괜찮죠? 하지만... 맛이....맛이 아쉬워요!!
간만 되게 짠 제육에 건더기는 양파밖에 없고 팅팅 불은 냉면을 먹으려니 정말 아쉬울 따름이었어요... 뭔가 학식의 맛이 균일하지 않고 스펙트럼이 굉장히 넓은 느낌입니다! 금일의 점심 중에서는 요구르트가 제일 맛있었던것 같네요🥲🥲
본론으로 가보죠!
문제링크:
이 문제는 전에 풀은적이 있는 문제입니다만, 현재 진행하는 과목 중에서 프로그래머스 문제를 다시 풀고있기에 제 옛날 코드와 새로 작성한 코드를 비교하며 발전한 부분이 있는지 확인하며 코드리뷰를 해 보도록 하겠습니다!
우선 구버젼의 코드 입니다.
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
vector<int> solution(int k, vector<int> score) {
priority_queue<int> pq;
vector<int> answer;
int i=0;
while(i<score.size()){
if(i<k){
pq.push(-1*score[i]);
}
else{
if(pq.top()>-1*score[i]){
pq.pop();
pq.push(-1*score[i]);
}
}
answer.emplace_back(-1*pq.top());
i++;
}
return answer;
}
이럴수가 이렇게 어렵게 풀었다고?
무려 priority_queue를 사용하여 풀었습니다!
코드의 흐름은 다음과 같습니다.
확실히 실력이 부족할 때 풀었던 풀이라서 그런지 다시 푼 풀이보다 훨씬 불편하게 풀었다고 생각합니다. 괜히 어렵게 풀었다라는 말이 잘 어울립니다. 개선점을 보면 다음과 같습니다.
새로운 풀이, 같이 한번 보시죠!
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(int k, vector<int> score) {
vector<int> answer;
vector<int> honor;
for(auto i:score){
honor.emplace_back(i);
sort(honor.rbegin(),honor.rend());
if(honor.size()>k)
honor.pop_back();
answer.emplace_back(honor.back());
}
return answer;
}
이전의 코드에 비해 훨씬 간략한 모습입니다!
pq도 사용하지 않았을 뿐더러 코드의 흐름이 생각의 흐름과 일치합니다.
핵심 step은 다음과 같습니다.
옛날에 비해 성장한 저의 모습을 보니 감개무량 하군요. 더 열심히 성장해보도록 하겠습니다!
작은 도움이 되었길 바라며, 포스팅을 마치겠습니다.