728x90
올해 ps를 시작하면서 웃긴게 가끔 프로그래머스 문제에 들어가보면
이상하게 풀다가 포기한것처럼 보이는 문제들이 있다.
지금 생각해보면 이걸 왜 이렇게 풀었지? 하면서 웃긴데 그만큼 성장했다는건가 싶어서 기분이 좋기도 하다
my full code
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int idx = 0;
while(idx < progresses.size()){
while(progresses[idx] < 100){
for(int i=idx; i< progresses.size(); i++){
progresses[i] += speeds[i];
}
}
answer.push_back(0);
while(idx < progresses.size() && progresses[idx] >= 100){
idx++;
answer.back()++;
}
}
return answer;
}
[문제]
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
728x90
[접근1]
idx는 다음에 배포할 곳의 위치를 가리킨다.
따라서 idx가 progresses의 사이즈와 같다면 while문을 끝내도 좋다.
vector<int> answer;
int idx = 0;
while(idx < progresses.size()){
...
}
[접근2]
idx가 가리키는 곳이 100을 넘을 때까지 while문을 반복했는데, 사실 (100 - progresses[idx])/speed의 값을 받아서 적당히 곱해서 더해주면 충분할거같다.
지금까지 ps를 하면서 처음엔 복잡하게 나중에 간단하게 푸는것이 좋다고 생각해서
그냥 while문으로 돌렸는데 돼서 놔뒀다.
작업속도가 소수까지 내려간다면 while문을 없애야할지도?
while(idx < progresses.size()){
while(progresses[idx] < 100){
for(int i=idx; i< progresses.size(); i++){
progresses[i] += speeds[i];
}
}
...
}
[접근3]
다음 배포할것의 작업 진도가 100을 넘었으면 answer에 0을 추가해서 답을 입력할 준비를 한다.
idx가 끝을 가리키지 않고 작업진도가 100을 넘은 작업을 가리키고있으면
idx를 다음 작업을 가리키게하고, 답을 1 증가시켜준다.
이러한 작업을 idx가 끝을 가리킬때까지 반복한다.
while(idx < progresses.size()){
...
answer.push_back(0);
while(idx < progresses.size() && progresses[idx] >= 100){
idx++;
answer.back()++;
}
}728x90
'coding > algorithm' 카테고리의 다른 글
| [programmers] Lv.1 체육복(c++) (0) | 2022.06.28 |
|---|---|
| [programmers] Lv.2 더 맵게(c++) (0) | 2022.06.27 |
| [programmers] Lv.1 소수 만들기(c++) (0) | 2022.06.27 |
| [programmers] Lv.2 소수 찾기(c++) (0) | 2022.06.27 |
| [SW Expert Academy] D3 1215. 회문1 (0) | 2022.05.28 |
댓글