-
[Algorithm] 프로그래머스 C++ : 기능개발Algorithm 2020. 8. 6. 01:08
https://programmers.co.kr/learn/courses/30/lessons/42586#
먼저, 첫번째 for문에서 각 기능들이 며칠만에 개발이 되는지 계산하여 days 벡터에 넣어준다.
그리고 일단 첫번째 기능 개발 시간은 비교 대상이 없으니 그냥 큐에 넣는다.
이후 days 요소들을 하나씩 보면서 만약 큐의 front() 값보다 작다면, 첫번째 기능과 함께 배포될 수 있으므로 큐에 삽입한다.
만약 큐의 front() 값보다 크면 함께 배포하는 것이 불가능하므로, 큐에 차있는 함께 배포 가능한 기능들의 개수를 answer에 넣어준다.
그리고 큐를 비워주고, 함께 배포가 불가능했던 기능의 개발 시간을 큐의 첫번째 값으로 넣어서
이전과 같이, 큐의 front() 값과 이후 요소들을 비교하여 함께 배포가 가능한 것들을 큐에 넣는 작업을 반복한다.
Code
#include <string> #include <vector> #include <iostream> #include <queue> using namespace std; vector<int> solution(vector<int> progresses, vector<int> speeds) { vector<int> answer; vector<int> days; queue<int> q; for(int i=0; i<progresses.size(); i++) { int d = (100 - progresses[i])/speeds[i]; if((progresses[i] + d*speeds[i])!=100) d++; days.push_back(d); } q.push(days[0]); for(int i=1; i<days.size(); i++) { if(q.front() >= days[i]) { q.push(days[i]); } else { answer.push_back(q.size()); while(!q.empty()) q.pop(); q.push(days[i]); } } if(!q.empty()) answer.push_back(q.size()); return answer; }
** 내가 만든 두개의 for 문을 하나로 합칠 수 있다.
개발 기간을 계산함과 동시에, 큐 대신 answer에 1을 삽입후 비교하면서 answer.back()을 ++해주는 방법
Code
#include <string> #include <vector> #include <iostream> using namespace std; vector<int> solution(vector<int> progresses, vector<int> speeds) { vector<int> answer; int day; int max_day = 0; for (int i = 0; i < progresses.size(); ++i) { day = (99 - progresses[i]) / speeds[i] + 1; if (answer.empty() || max_day < day) { answer.push_back(1); max_day = day; } else answer.back()++; } return answer; }
'Algorithm' 카테고리의 다른 글
[Algorithm] 프로그래머스 C++ : 프린터 (0) 2020.08.09 [Algorithm] 프로그래머스 C++ : 다리를 지나는 트럭 (2) 2020.08.07 [Algorithm] 프로그래머스 C++ : 주식가격 (0) 2020.08.05 [Algorithm] 프로그래머스 C++ : 베스트앨범 (0) 2020.07.14 [Algorithm] 프로그래머스 C++ : 위장 (0) 2020.07.12