[프로그래머스 Lv2] 기능개발

수민이슈·2023년 6월 20일
0

[C++] 코딩테스트

목록 보기
34/116
post-thumbnail

🖊️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42586

🖊️ 1차 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> release;
    
    for (int i = 0 ; i < progresses.size() ; i++) {
     	int cnt = 1;
        while(progresses[i] + speeds[i] * cnt < 100)
            cnt++;
        release.emplace_back(cnt);
    }
    
    int lastRelease = release[0];
    int releaseCnt = 0;
    for(int i = 0 ; i < release.size() ; i++) {
        if (release[i] <= lastRelease) {
            releaseCnt++;
        }
        else {
            lastRelease = release[i];
            answer.emplace_back(releaseCnt);
            releaseCnt = 1;
        }
    }
    answer.emplace_back(releaseCnt);
    
    return answer;
}

일단 성공
하지만..
루프를 두 번 돌고 있다

개선하고싶다.

그리고 루프돌면서 계산하는것보다
방정식 이용해서 cnt를 구하자
변수도 조금 더 직관적으로 사용해보자 (나를 위해)

🖊️ 2차 풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> release;
    
    int lastDay = 0;
    for (int i = 0 ; i < progresses.size() ; i++) {
     	float fday = ((100 - progresses[i]) / (float)speeds[i]);
        fday = ((100 - progresses[i]) % speeds[i] == 0 ? fday : fday+=1);
        int day = (int)fday;
        if (lastDay >= day) {
            ++answer.back();
        }
        else {
            answer.emplace_back(1);
            lastDay = day;
        }
   	}
	    
    return answer;
}

흠흠.. 확실히 나은지는 모르겠고
사실 다른 사람의 코드 보고 참고해서 했다

테스트케이트 2, 4번에서 오류가 나서
결국 로그를 찍어봤는데
day 계산하는 부분에서 나누기 연산때문에 day를 float로 했슴
근데 결국 day는 int 단위로 분별해야 하니까 다시 int로 바꿔주지 않아서
5.542 5.71 이런식으로 day가 나와서 자꾸 틀린 답이 나왔었다

배운점 !!

++answer.back();
이렇게 하면 이전 값을 그냥 바꿔줄 수 있다
호호호

0개의 댓글