알고리즘/프로그래머스
[프로그래머스] 기능개발 (코딩테스트 연습 | 스택/큐)
KyuminKim
2024. 9. 10. 16:42
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
✅ 우선 days 배열을 만든다
- days 배열
- 각각 일을 다 마치기(100%)까지 걸리는 날짜
- ⚠️ speed로 나누어 떨어지는 경우 / 그렇지 않은 경우 나눠서 연산
✅ days를 앞에서부터 순회 -> 정답 구함
- days 순회
- 뒤 원소가 작다면, 무시하고 그 다음 큰 원소 찾음
- 7 3 9 -> 7 9
- ⚠️ days.append(101)을 통해 마지막 원소도 정상적으로 출력하도록 함
코드
def solution(progresses, speeds):
answer = []
days = []
for i in range(len(progresses)):
if (100-progresses[i]) % speeds[i] == 0:
days.append((100-progresses[i]) // speeds[i])
else:
days.append((100-progresses[i]) // speeds[i] + 1)
days.append(101)
temp = days[0]
answer_temp = 0
for day in days:
if temp >= day:
answer_temp += 1
elif temp < day:
answer.append(answer_temp)
answer_temp = 1
temp = day
return answer
다른 사람 풀이
✅ math.seil 함수
- (실수) 반올림하여 정수 반환 함수
- -((p-100)//s)
- 음수 // 연산 후 - 연산
- math.seil과 같은 효과
- days 배열 산출 코드 단축 가능
✅ math.floor 함수
- (실수) 반내림하여 정수 반환 함수
✅ zip 함수 활용
for p, s in zip(progresses, speeds):
- days 배열 산출 코드 단축 가능