알고리즘 공부
프로그래머스 level2 연습 문제-기능개발
컴퓨터과학
2020. 2. 17. 18:25
https://programmers.co.kr/learn/courses/30/lessons/42586
코딩테스트 연습 - 기능개발 | 프로그래머스
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇
programmers.co.kr
정답 :
#include <string>
#include <vector>
using namespace std;
vector<int>stack;
vector<int>stackCount;
int Sum(int progresses,int speeds,int cnt){
progresses=progresses+speeds;
if(progresses<100){
cnt++;
return Sum(progresses,speeds,cnt);
}else{
return cnt;
}
}
vector<int> Count(vector<int> progresses,vector<int> speeds,int i){
//progresses[i]=progresses[i]+speeds[i];
for(int i=0;i<progresses.size();i++){
int cnt=1;
stack.push_back(Sum(progresses[i],speeds[i],cnt));
}
return stack;
}
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> answer1;
vector<int> answer2;
int ccn=1;
answer1 =Count(progresses,speeds,0);
int tmp=answer1[0];
int tmpccn=0;
for(int i=1;i<answer1.size();i++){
tmpccn++;
if(tmp >=answer1[i]){
ccn++;
}else if(tmp<answer1[i]){
answer.push_back(ccn);
ccn=1;
tmp=answer1[i];
}
if(answer1.size()-1==tmpccn){
answer.push_back(ccn);
}
}
// answer=answer1;
return answer;
}
200806
#include <string>
#include <vector>
#include <algorithm>
#include<iostream>
using namespace std;
struct Saves{
int progress;
int num;
int days;
};
bool cmp(const Saves &p1, const Saves &p2){
if(p1.num < p2.num){
return true;
}
else if(p1.num== p2.num){
return p1.num < p2.num;
}
else{
return false;
}
}
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
vector<int> task;
vector<int> list;
vector<Saves >data;
static bool bCheck=false;
for(int i=0;i<progresses.size();i++){
Saves tmp;
tmp.progress=progresses[i];
tmp.num=i;
tmp.days=0;
data.push_back(tmp);
}
int count=data.size()-1;
while(1){
bCheck=true;
for(int i=0;i< data.size();i++){
if(data[i].progress<100){
data[i].progress+= speeds[i];
data[i].days+=1;
bCheck=false;
}
}
if(bCheck==true){
break;
}
}
sort(data.begin(),data.end(),cmp);
int countNum=1;
int dateMax=data[0].days;
for(int i=1;i<data.size();i++){
if(dateMax<data[i].days){
answer.push_back(countNum);
countNum=1;
dateMax=data[i].days;
}else if(dateMax>data[i].days){
countNum++;
}else if(dateMax==data[i].days){
countNum++;
}
}
answer.push_back(countNum);
return answer;
}
뭔가 지난번이 더 간단하게 푼것같다
훨씬 더 간단하게 푼듯
음 틀렸던점은 speed도 같이 pop 해줘야하는데
작업만 pop을 해줌
201003
#include <string>
#include <vector>
#include<iostream>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
while(progresses.size()>0){
for(int i=0;i<progresses.size();i++){ //작업 진행
progresses[i]+=speeds[i];
// cout<<progresses[i]<<",";
}
// cout<<endl;
int data=0;
for(int i=0;i<progresses.size();i++){ //나머지 한번씩 검사
if(progresses[i]>=100){ //무조건 맨처음 데이터만 검사 만약 첫번째가 100안넘엇으면 다른것들도 마찬가지
data++;
}
else if(progresses[i]<100){
i=progresses.size()+1;
}
}
for(int i=0;i<data;i++){
progresses.erase(progresses.begin());
speeds.erase(speeds.begin());
}
//cout<<endl;
if(data>0){
answer.push_back(data);
data=0;
}
}
return answer;
}