728x90
https://programmers.co.kr/learn/courses/30/lessons/42586
문제 풀이
반복문과 조건문으로 스택/큐 없이 직관적으로 풀었다.
프로세스의 값이 100 이상이라면 다음 프로세스의 크기를 확인해서 cnt를 +1 해준다.
아니라면 모든 프로세스의 속도만큼 더 해준다.
이때, 프로세스의 값이 이미 100 이상이라면 continue로 건너뛴다.
cnt 값이 1 이상일 때 answer에 값을 push 해주고 idx에 더해준다.
느낀 점
다른 고수의 코드를 우연하게 봤는데 정말 기가 막혔다. 1번의 반복문으로 해결하였고 각 처리까지 걸리는 시간을 비교하면서 구현하였다. 세상엔 역시 고수들이 많다.. (코드 2 참고)
코드 1
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int idx = 0;
int size = progresses.size();
while (true) {
int cnt = 0;
if (size == idx) break;
if (progresses[idx] >= 100) {
for (int i = idx; i < size ;i++) {
if (progresses[i] >= 100) cnt++;
else break;
}
}
else {
for (int i = idx; i < size ;i++) {
if (progresses[i] >= 100) continue;
progresses[i] += speeds[i];
}
}
if (cnt >= 1) {
answer.push_back(cnt);
idx += cnt;
}
}
return answer;
}
코드 2
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);
else answer.back()++;
max_day = max(max_day, day);
}
return answer;
}
'문제 풀이 > 프로그래머스 (Programmers)' 카테고리의 다른 글
[C++] 프로그래머스 : 더 맵게 (0) | 2021.10.07 |
---|---|
[C++] 프로그래머스 : 위클리 챌린지 (8주차) (0) | 2021.10.03 |
[C++] 프로그래머스 : 124 나라의 숫자 (0) | 2021.10.02 |
[C++] 프로그래머스 : 멀쩡한 사각형 (0) | 2021.10.01 |
[C++] 프로그래머스 : 단체사진 찍기 (0) | 2021.09.30 |
댓글