저고데

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

프로그래머스

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

진철 2023. 1. 12. 21:59
728x90
반응형

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

해당 문제를 간략하게 설명하자면 다음과 같다.

progresses와 speeds라는 배열이 주어진다.

progresses는 작업이 얼마나 진행되었는가를 나타내고, speeds는 작업이 하루동안 얼마나 완료될 수 있는가를 나타낸다.

예를 들면 progresses=[93, 30, 55] speeds=[1, 30, 5]라면 작업이 세 개가 있는 것이다.

그리고 각각의 작업은 93% 30% 55%가 작업이 완료되었으며, 하루가 지나면 (93+1)% (30+30)% (55+5)%로 작업이 진행된다는 것을 의미한다.

모든 작업은 100%를 넘겨야 배포가 완료되며, 가장 앞의 작업이 배포가 되어야 뒤의 작업이 배포가 된다.

즉, 뒤의 작업이 100%가 되어도 앞의 작업이 배포되지 않으면 대기한다는 것이다.

따라서 몇개의 작업이 배포가 되는지 구하는 것이 본 문제이다.

 

해당 문제를 풀기 위해서는 작성해야하는 코드의 순서는 다음과 같다.

1. 100에서 현재 진행된 progresses를 빼주고 speeds를 나누어서 몇일 뒤에 완료가 되는 지 계산한다.

2. 첫 작업부터 남은 일 수를 비교하며, 앞의 작업의 일 수가 클 시에는 누적하여 answer에 append해준다.

 

import math

def solution(progresses, speeds):
    answer = []
    stack=[]
    for i in range(len(speeds)):
        temp=100-progresses[i] #1번 : 각 작업마다 남은 작업 정도를 구해준다.
        day=int(math.ceil(temp/speeds[i])) #1번 : 100보다 크거나 같아야 배포가 가능한 상태이기 때문에 소수점이 나오는 경우, ceil을 이용하여 값을 올려준다.
        stack.append(day) #1번 : 빈 리스트에 순서대로 append해준다.
        
    num=1
    first=stack[0] #2번 : 가장 첫 원소를 first로 선언하여 비교해주기로 한다.
    for i in range(1,len(stack)):
        if stack[i] <= first: #2번 : 첫 원소보다 값이 작거나 같은 경우에는 현재 배포가 가능하지만 첫 원소가 배포된 이후에 배포가 가능하기 때문에 num++를 해준다.
            num+=1
        else: #2번 : 첫 원소보다 큰 경우에는 첫 원소가 배포되어도 작업이 완료되지 않아서 배포가 불가능하다. 
              #하지만 앞의 원소들은 배포가 완료된 상태이기 때문에 answer에 지금까지 증가시킨 num을 append해주어 배포해준다.
              #그리고 앞의 원소들을 모두 배포시켰기 때문에 다시 num을 1로 초기화시켜준다.
            first=stack[i] 
            answer.append(num)
            num=1
    answer.append(num)
            
    return answer

 

해당 문제의 경우에는 스택과 큐를 사용하는 문제이지만, 그렇지 않고 배열을 사용하여 간단하게 해결할 수 있었다. 문제를 해결하는 데는 여러가지 방법이 있지만 가장 간단하고 편한 방법이 좋은 방법이라고 생각하기에 필자는 배열을 사용한 풀이 방법을 채택하였다.

 

 

728x90
반응형

'프로그래머스' 카테고리의 다른 글

[프로그래머스]타겟 넘버  (0) 2023.01.13
[프로그래머스]오픈채팅방  (0) 2023.01.13
[프로그래머스]프린터  (0) 2023.01.12
[프로그래머스]이중순위큐  (0) 2023.01.12
[프로그래머스]튜플  (0) 2023.01.12