본문 바로가기
알고리즘

[알고리즘] 기능 개발

by keel_im 2020. 9. 23.
반응형

포인트

  • 구현을 잘 할 수 있는가를 초점에 맞춘다. 
  • 급하게 구하려고 하지 말자 생각을 하고 자연스럽게

🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다. 

c++/cpp

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    vector<int> days;

    for (int i = 0; i < progresses.size(); i++) {
        int temp = 100 - progresses[i];
        int cnt = 0;
        while (temp > 0) {
            temp -= speeds[i];
            cnt++;
        }
        days.push_back(cnt); // 몇일 남았는지 배열에 넣어 준다.
        // 7 3 9
    }

    for (int i = 1; i < days.size(); i++) {
        days[i] = max(days[i], days[i-1]);
        // 7 7 9
    }

    int answer_count = 1;
    for (int i = 1; i < days.size(); i++) {

        if (days[i] == days[i - 1]) {
            answer_count++;
        } else {
            answer.push_back(answer_count);
            answer_count = 1;
        }
    }
    answer.push_back(answer_count);


    return answer;
}

python

def solution(progresses: list, speeds: list) -> list:
    progresses = list(map(lambda x: 100 - x, progresses))
    answer = []
    days = []
    for progress, speed in zip(progresses, speeds):
        day = progress // speed
        if progress % speed != 0:
            day += 1
        days.append(day)
    # 남아있는 날짜 계산
    while days:
        days = list(map(lambda x: x - 1, days))
        if days[0] == 0: # 앞에가 0이면 0까지 계산
            cnt = 0
            for ele in days:
                if ele <= 0:
                    cnt += 1
                else:
                    break # 0이 아니면 끊고
            days = days[cnt:] # days 업데이트 한다.
            answer.append(cnt)
    return answer


print(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]))
print(solution([93, 30, 55], [1, 30, 5]))

 

반응형

댓글