일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- WSSS
- 프로그래머스
- logistic regression
- cs231n
- IVI
- vscode
- airflow
- 기초확률론
- Decision Boundary
- Jupyter notebook
- docker attach
- 도커
- GIT
- Multi-Resolution Networks for Semantic Segmentation in Whole Slide Images
- 백신후원
- CellPin
- AIFFEL
- HookNet
- docker
- 오블완
- 사회조사분석사2급
- 코크리
- 히비스서커스
- ssh
- numpy
- docker exec
- aiffel exploration
- 티스토리챌린지
- Pull Request
- cocre
- Today
- Total
히비스서커스의 블로그
[Programmers] 기능개발 본문
프로그래머스 코딩테스트 문제 중 스택/큐를 이용해야하는 문제 기능개발에 대해 파이썬으로 해결한 풀이와 해설입니다.
문제링크
https://programmers.co.kr/learn/courses/30/lessons/42586
solution
def solution(progresses, speeds):
days = [0 for l in range(len(speeds))]
cnt1 = 0
while min(progresses) < 100:
cnt1 += 1
for i, (progress, speed) in enumerate(zip(progresses, speeds)):
progresses[i] = progress + speed
if (progresses[i] >= 100) and (days[i] == 0):
days[i] = cnt1
answer = []
ans_num = days[0]
cnt2 = 1
for j in range(1, len(days)):
if ans_num >= days[j]:
cnt2 += 1
else:
answer.append(cnt2)
ans_num = days[j]
cnt2 = 1
answer.append(cnt2)
return answer
해설
저는 크게 2 파트로 나누어 해결하였습니다. 2 파트는 각 작업의 개발하는데 걸린 일수가 담긴 리스트를 만드는 과정과 그 일수가 담긴 리스트에서 배포일이 담긴 리스트를 만다는 과정입니다.
각 작업의 개발하는데 걸린 일수가 담긴 리스트를 만드는 과정
1. speeds의 길이와 동일하며 0이 담긴 days 리스트를 만듭니다.
2. 카운트변수 cnt1을 0으로 설정한 후 progresses 리스트의 최소값이 100보다 작을 동안 while문을 돌게 합니다.
3. 한 번 돌 때마다 cnt1을 1씩 증가시키고 for구문을 돌리면서 progresses와 speed의 원소들을 하나씩 빼낸 후 둘을 더한 것으로 progresses의 원소를 최신화합니다.
4. if 문을 통해 progresses의 원소의 값이 100을 넘고 동시에 days의 값이 0이 아니라면 days의 원소의 값을 cnt1으로 대체해줍니다. (days의 값이 0이 아닌 조건을 넣어준 이유는 처음 100을 넘는 순간만 넣기 위함입니다.)
일수가 담긴 리스트에서 배포일이 담긴 리스트를 만다는 과정
메인 아이디어는 days 리스트 안에서 앞의 원소들보다 큰 원소가 나올 경우 앞의 원소들의 합을 구하여 answer 리스트에 넣는 것입니다.
1. answer 리스트를 생성해주고 days의 첫번째 원소의 값을 ans_num이라는 변수에 넣습니다.
2. for문을 돌면서 days에 있는 원소들을 두번째 원소부터 뽑으며 ans_num보다 큰 경우에는 cnt2변수를 1증가시켜주고 그렇지 않은 경우에는 answer 리스트에 넣어주고 ans_num을 최신화시켜주고 cnt2를 다시 1로 바꿔줍니다.
3. for 문이 끝났을 경우 마지막 cnt2의 값이 answer에 넣어주지 않은 상태이므로 넣어주고 그 값을 return합니다.
-히비스서커스-
'Theory > Algorithm' 카테고리의 다른 글
[Programmers] 베스트앨범 (0) | 2021.09.03 |
---|---|
[Programmers] 위장 (0) | 2021.09.02 |
[Algorithm] 해시법 (0) | 2021.08.26 |
[Programmers] 더 맵게 (2) | 2021.08.20 |
[Algorithm] 선형검색 이진검색 (0) | 2021.02.04 |