본문 바로가기
코딩테스트/파이썬

[프로그래머스] 기능 개발(level 2) (파이썬)

by 커피는아아 2021. 5. 10.
반응형

문제 접근

  • 간단한 문제로 생각했으나 문제를 잘 못 파악한 것이 코드를 잘못작성하는 것으로 이어졌다.
  • 문제파악을 잘하는 것이 중요할 것 같다
# https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3

# 내가 푼 것 (1차)
from collections import deque
import math

from collections import deque
import math

def solution(progresses, speeds):
    answer = []
    
    q = deque()
    
    time = 0 # 누적된 시간을 나타냄
    
    for i in range(len(speeds)):
        day = math.ceil((100 - progresses[i]) / speeds[i])
        q.append(day) # 작업이 완료되는 일자를 q에 담음
    print(q)
    while q:
        cnt = 0
        first = q.popleft()
        cnt += 1
        if len(q) != 0:
            while time + first >= q[0]: # time 제거가 정답 작업일이 누적된다고 생각해서 오류가 낫다 작업일 누적일이 아닌 처음 담기는 값을 생각했어야함 
                q.popleft()
                cnt += 1
                if len(q) == 0:
                    break
        answer.append(cnt)
        time += first
    return answer


# 내가 푼 것 (2차)
import math

def solution(progresses, speeds):
    answer = []
    
    temp = []
    
    time = 0 # 누적된 시간을 나타냄
    count = 0 # 작업이 완료된 갯수
    
    for i in range(len(speeds)):
        v = math.ceil((100 - progresses[i]) / speeds[i])
        temp.append(v) # 작업이 완료되는 일자를 temp에 담음
    print(temp)
    
    count = 0
    
    p = temp[0] # 기준 작업일자를 계속 바꿔준다.
    for i in range(len(temp)):
        if p < temp[i]: 
            answer.append(count)
            count = 0
            p = temp[i]
        count += 1
    answer.append(count)
    return answer


# 참고 답안
def solution(progresses, speeds):
    answer = []
    time = 0
    count = 0
    while len(progresses)> 0:
        print(progresses[0] + time*speeds[0])
        if (progresses[0] + time*speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer

초안