알고리즘, 자료구조

기능 개발

hs-archive 2022. 7. 1. 15:23

문제
예시

while progresses:로 묶고

for 문을 돌려 progress[i] += speed[i]를 해준 뒤

progresses[0]이 100 이상이라면 progresses[0]을 포함해 그 뒤에 것들까지 요소의 값이 100 이상인 것을 찾고 해당 요소를 pop()하는 식으로 문제를 풀었다.

 

def solution(progresses, speeds):
    answer = []

    while progresses:
        for i in range(len(progresses)):
            progresses[i] += speeds[i]

        if progresses[0] > 99:
            res = 0

            while progresses and progresses[0] > 99:
                res += 1
                progresses.pop(0)
                speeds.pop(0)

            answer.append(res)

    return answer

 

 

하지만 저렇게 할 필요 없이 해당 progress가 완료될 때까지 며칠이 남았는지 구하고 그 일수가 앞에 있는 progress보다 작으면 앞의 count에 +1 하고 그게 아니면 새로 append() 하는 식으로 하면 더 짧고 빠르게 문제를 해결할 수 있다. 코드 로보면 아래와 같다.

def solution(progresses, speeds):
    Q = []
    
    for p, s in zip(progresses, speeds):
        if len(Q) == 0 or Q[-1][0] < -((p - 100)//s):
            Q.append([-((p - 100)//s), 1])
        else:
            Q[-1][1] += 1

    return [q[1] for q in Q]

 

여기서 5, 6번째 줄에 ((100 - p) // s)를 하지 않고 -((p - 100) // s)를 하는 이유는

((100 - p) // s)의 경우 (100 - p) ÷ s가 자연수가 아니면 math.ceil() 함수를 사용해 올림을 해야 하지만

음수의 경우 파이썬의 특징 때문에 math.ceil() 함수를 쓰지 않고도 원하는 값을 구할 수 있기 때문이다.

 

 

 

 

 


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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

'알고리즘, 자료구조' 카테고리의 다른 글

완주하지 못한 선수  (0) 2022.07.04
ArrayList,LinkedList 비교  (0) 2022.07.01
124 나라의 숫자  (0) 2022.06.25
멀쩡한 사각형( 파이썬 ) - 프로그래머스  (0) 2022.06.24
DFS와 BFS - 파이썬 구현  (0) 2022.06.20