문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
- 남은 일수 담은 배열 생성
- 편하게 연산하기 위해 큐에 일수 모두 넣기
- 큐에서 pop한 후 그 값이 queue[0]보다 크거나 같다면 함께 처리 할 수 있는 기능
- queue[0]값 pop
- cnt += 2
- queue[0]이 더 크다면 함께 처리할 수 없는 기능이므로 answer배열에 여태 계산한 기능 수를 넣고 바깥쪽 루프 연산 다시 시작
코드
from collections import deque
def solution(progresses, speeds):
answer = []
days = []
for i in range(len(progresses)):
day = 100 - progresses[i]
if day % speeds[i] == 0:
day = day // speeds[i]
days.append(day)
else:
day = day // speeds[i] + 1
days.append(day)
# 큐 만들어서 빼면서 비교
queue = deque()
for i in range(len(days)):
queue.append(days[i])
while queue:
cnt = 1
value = queue.popleft()
while queue and queue[0] <= value:
cnt += 1
queue.popleft()
answer.append(cnt)
return answer
from collections import deque
def solution(progresses, speeds):
answer = []
days = []
for i in range(len(progresses)):
day = 100 - progresses[i]
if day % speeds[i] == 0:
day = day // speeds[i]
days.append(day)
else:
day = day // speeds[i] + 1
days.append(day)
# 큐 만들어서 빼면서 비교
queue = deque()
for i in range(len(days)):
queue.append(days[i])
while queue:
cnt = 1
value = queue.popleft()
while queue:
tmp = queue[0]
if tmp <= value:
cnt += 1
queue.popleft()
else:
answer.append(cnt)
if cnt:
answer.append(cnt)
return answer
거의 비슷한 로직이지만 조건문 분기를 너무 많이해서 시간초과 발생
분기처리를 간단화하고 while뮨 내부 while문이 계속해서 다음 기능을 확인하므로 다음 기능을 함께 개발하지 못할 경우 그냥 answer 배열에 값을 넣어주면 시간 초를 줄일 수 있다.
'Algorithm > Stack & Queue' 카테고리의 다른 글
| [Python] 프로그래머스 주식가격 (1) | 2024.07.19 |
|---|---|
| [Python] 프로그래머스 프로세스 (0) | 2024.07.17 |
| [Python] 백준 9935번 문자열 (0) | 2024.07.15 |
| [JAVA] 백준 1715번 카드 정렬하기 (1) | 2023.12.13 |
| [JAVA] 백준 11000번 강의실 배정 (1) | 2023.12.13 |