일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- Elasticsearch
- 프로그래머스
- IT
- Java
- 도커
- Python
- 네트워크
- 카카오
- 쿠버네티스
- programmers
- 파이썬
- 자바
- 백엔드
- 엘라스틱서치
- 스프링
- 알고리즘
- 스프링부트
- springboot
- 운영체제
- C
- DPDK
- 코딩테스트
- 프로그래머스 #카카오 #IT #코딩테스트
- docker
- Spring
- 리눅스
- Kakao
- 캐시
- 개발자
- Linux
- Today
- Total
저고데
[프로그래머스]기능개발 본문
문제 링크 : 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
해당 문제의 경우에는 스택과 큐를 사용하는 문제이지만, 그렇지 않고 배열을 사용하여 간단하게 해결할 수 있었다. 문제를 해결하는 데는 여러가지 방법이 있지만 가장 간단하고 편한 방법이 좋은 방법이라고 생각하기에 필자는 배열을 사용한 풀이 방법을 채택하였다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스]타겟 넘버 (0) | 2023.01.13 |
---|---|
[프로그래머스]오픈채팅방 (0) | 2023.01.13 |
[프로그래머스]프린터 (0) | 2023.01.12 |
[프로그래머스]이중순위큐 (0) | 2023.01.12 |
[프로그래머스]튜플 (0) | 2023.01.12 |