programmers.co.kr/learn/courses/30/lessons/42586#
어훙 증말 나는 거의 다 떠올려놓고 맨날 마지막 핀트가 어긋나는 경우가 있..다아..
속상행...!!!!
하지만 인간은 완벽할 수 없지..후 불완전성의 미일까... 🙊
어.쨋.든 다음의 그림으로 문제를 이해해보자!!!!!!!!!!!!
사실 맨 처음에는 while을 사용하여 지속적으로 day를 카운팅하고, 그것을 통해 기능이 배포되는 일 수들을 측정할 까 했다. 어떻게 생각해도 비효율적인 방식이었다.
그럼 어떻게할까 란 생각이 들었고...
옴매? 그냥 채워야하는 100일 중 남은 일수를 speeds로 나누어 주면 해결될 일이었다.
위와 같은 방식으로 생각하면 100-progressess[i] / speeds[i] 의 식을 도출 할 수 있었다. 나머지가 남는다면 하루를 더 더해주는 계산 또한 필요했다.
그렇게 작업 개수만큼 필요한 날의 개수를 계산하여 required_days vector에 저장해주었다.
맨 처음 코드를 작성했을 때에는 단순히 현재 작업보다 뒤에 있는 작업이 크다면 count를 answer에 push해주었다. 이렇게 작성하였을 때에는 두 개의 테스트 케이스를 통과할 수 있었지만... 히든 케이스를 통과할 수 없었다.
haha..그 이유는..
progresses: [99,1,99,1], speeds: [1,1,1,1] return: [1,3]
이 테스트케이스가 통과가 되지 못했다..
음...위의 progresses의 필요 일 수를 계산하면 [1, 99, 1, 99]가 된다. 그럼 제일 처음 마무리 되는 작업은 처음 작업과, 세번째 작업이다. 하지만 세번째 작업은 앞의 두번째 작업이 끝날 때 까지 배포되지 못하니, 첫 번째 작업과 함께 배포될 수 없다.
그렇기 때문에 첫번째 배포 때에는 첫번째 기능만 배포된다. 두번째 작업은 99일을 소요한다. 다음 작업은 미리 끝나 있었기 때문에 함께 배포되어야 한다. 문제는 내 이전 코드가 마지막 99일을 고려하지 못했다는 점이다...
그래서 방법을 바꾸었다아!!!!!!!!!!!! 🙀🙀🙀🙀
이중 포문을 수행하며 i의 값과 같은 날 배포할 수 있는 조건의 작업들을 찾아(required_days[i]≥required_days[j]) count를 해주고, 이를 answer에 추가해 주는 것이었다..ㅎㅅㅎ
이와 같은 작업을 코드로 작성하니 테스트 케이스와 모든 히든 케이스를 통과할 수 있었다 hehe
deque로 접근하는 코드도 있더라... 한번 확인해 보아야 겠구나아!
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> required_days;
vector<int> solution(vector<int> progresses, vector<int> speeds)
{
vector<int> answer;
for (int i = 0; i < progresses.size(); i++) {
int days = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] != 0)
days++;
required_days.push_back(days);
}
int sum = 0;
int count = 1;
for (int i = 0; i < required_days.size(); i += count) {
count = 1;
if (sum >= progresses.size())
break;
for (int j = i + 1; j < required_days.size(); j++) {
if (required_days[i] >= required_days[j])
count++;
else
break;
}
answer.push_back(count);
sum += count;
}
return answer;
}
'Algorithm 💫 > Problem Solving' 카테고리의 다른 글
[백준 10815번 숫자카드/ C++] (0) | 2020.12.02 |
---|---|
[백준 1325번 효율적인 해킹/C++] (0) | 2020.12.02 |
[백준 2751번 수 정렬하기 2 / C++] (0) | 2020.12.02 |
[프로그래머스 - 다리를 지나는 트럭 / C++] (0) | 2020.12.02 |
[백준 20055번 컨베이어 벨트 위의 로봇 - 삼성 코테 기출 / C++] (3) | 2020.11.29 |
댓글