[프로그래머스] 스택/큐 - 기능개발 (파이썬)
- 프로그래밍/프로그래머스
- 2020. 5. 1. 20:54
프로그래머스 스택/큐 - 기능개발, 문제 확인
문제 설명은 아래와 같다.
각 기능은 진도가 100%일 때, 서비스에 반영할 수 있음
각 기능의 개발속도는 모두 다름
뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발되면, 앞에 있는 기능이 배포될 때 함께 배포됨
progress : 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열
speeds : 각 작업의 개발 속도가 적힌 정수 배열
배포는 하루에 한번 할 수 있음
예를 들어 진도율이 95%인 작업의 개발속도가 4%라면 배포는 2일 뒤에 이루어짐
각 배포마다 몇개의 기능이 배포되는지를 리턴
문제 설명만 봐서는 잘 이해가 가지 않으니 예시를 함께 보자. 첫 기능의 경우 93% 완료되어있고 하루에 1%씩 작업이 가능하므로 7일간 작업 후 배포가 된다. 두번째 기능은 같은 방식으로 3일 후 배포가 가능한데 이전 기능이 아직 완성되기 전이므로 7일째에 같이 배포된다. 세번째 기능은 9일간 작업 후 배포가 가능하기 때문에 리턴은 [2,1]이 되는 것이다.
progresses |
speeds |
return |
[93,30,55] |
[1,30,5] |
[2,1] |
프로그래머스 스택/큐 - 기능개발, 문제 풀이 (파이썬)
제일 먼저, prog와 speed를 통해 각 기능마다 배포까지 걸리는 시간을 계산한 후 해당 값들로 day 리스트를 생성한다.
day=[]
answer=[]
#걸리는 시간들 구하기 (day list)
for p,s in zip(prog,speed):
tmp=(100-p)//s
if (100-p)%s>0: tmp=tmp+1
day.append(tmp)
걸리는 시간을 전부 계산해놓은 day 리스트에 대해 반복문을 돌며 해당 값이 max 값인지, max보다 작거나 같은지를 확인하는 방식으로 리턴할 리스트의 요소 값을 추가하거나 이전 값에 +1을 해주거나 하는 방식을 사용했다. 초기값은 무조건 max이므로 max로 설정해주고 answer 리스트에 1을 추가해준다. day 리스트가 [7,7,9]라고 한다면 max값은 7이되고 answer 리스트는 [1]이 된다.
#리스트에 직접 카운트하는 방식 + enumerate 사용
for i,d in enumerate(day):
#초기값을 max값으로 세팅
if i==0:
max=d
answer.append(1)
continue
만약에 day 리스트의 값이 max값보다 작거나 같다면 앞에 더 큰 작업시간을 가진 기능과 같이 배포가 되어야 하므로 answer의 마지막 요소에 +1을 해준다. day 리스트 [7,7,9]에서 두번째 7일 경우 max값인 7보다 7이 작거나 같으므로 answer 리스트가 [2]가 된다.
#max보다 시간이 더적게걸린다면 이전값 +1 (리스트 [-1] 사용)
if d<=max:
answer[-1]+=1
이제 마지막 조건문이다. max보다 큰 작업시간을 가진 기능이 있다면 해당 값을 max로 갱신하고 answer 값에 새로운 1값을 추가해준다. day 리스트가 [7,7,9]에서 마지막 요소인 9를 예로 들면, 현재 max 값인 7보다 크므로 answer 리스트는 [2,1]이 된다.
#현재값이 max라면 max를 갱신하고 answer요소를 새로 추가
else:
max=d
answer.append(1)
전체 코드는 아래와 같다.
def solution(prog, speed):
day=[]
answer=[]
#걸리는 시간들 구하기 (day list)
for p,s in zip(prog,speed):
tmp=(100-p)//s
if (100-p)%s>0: tmp=tmp+1
day.append(tmp)
#count를 제거하고 리스트에 직접 카운트하는 방식 + enumerate 사용
for i,d in enumerate(day):
#초기값을 max값으로 세팅
if i==0:
max=d
answer.append(1)
continue
#max보다 시간이 더적게걸린다면 이전값 +1 (리스트 [-1] 사용)
if d<=max:
answer[-1]+=1
#현재값이 max라면 max를 갱신하고 answer요소를 새로 추가
else:
max=d
answer.append(1)
return answer
아래와 같이 모든 테스트케이스를 통과하는 것을 볼 수 있다.
'프로그래밍 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 쇠막대기 (python) (0) | 2020.05.04 |
---|---|
[프로그래머스] 스택/큐 - 프린터 (python) (0) | 2020.05.03 |
[프로그래머스] 스택/큐 - 다리를 지나는 트럭 (파이썬) (0) | 2020.04.29 |
[프로그래머스] 스택/큐 - 탑 (파이썬) (0) | 2020.04.29 |
[프로그래머스] 해시 - 베스트앨범 (파이썬) (0) | 2020.04.28 |