** 개인적 공부를 위한 포스팅일 뿐이므로 신뢰성은 보장할 수 없습니다.
이전에 풀었던 문제이나 다시 보니 또 초면이라^^; 바로 풀이하지 못했고, 이전에 제출한 답안이 상당히 비효율적인 면이 있어서 다시 풀었다.
이전 풀이
from collections import deque
def solution(progresses, speeds):
dq = deque()
for i in range(len(progresses)):
dq.append([progresses[i], speeds[i]])
# print(dq)
def speed_up():
for idx, val in enumerate(dq):
p, s = val
dq[idx][0], dq[idx][1] = p + s, s
# print(dq)
cnt = 0
answer = list()
while dq:
# print('>>>>')
if dq[0][0] >= 100:
dq.popleft()
cnt += 1
# print(dq)
# print(cnt)
# print(answer)
else:
if cnt > 0:
answer.append(cnt)
cnt = 0
speed_up()
else:
answer.append(cnt)
return answer
개선점
- deque라는 자료형을 굳이 사용할 필요가 없다. 큐의 특성을 활용하기 위해 deque 자료형을 사용하려 한 것 같으나 해당 문제는 큐의 속성을 사용하지 않고 리스트만으로도 충분히 풀이 가능하다.
- 굳이 deque라는 자료형을 사용해 놓고 enumerate를 사용하여 리스트로 변환하여 순회한다.
- enumerate도 굳이 사용할 필요가 없다. enumerate를 사용한 것은개발작업들이 100%를 넘어도 앞에 위치한 개발 작업이 100%가 넘지 않는 한 배포되지 않는다는 것을 확실히 하기 위해 당시 생각해 낸 방법인 것 같다.
재풀이
def solution(progresses, speeds):
day = 0 // 작업일
cnt = 0 // 배포 가능한 기능 수
answer = []
while progresses:
temp = progresses[0] + speeds[0] * day
if temp >= 100:
progresses.pop(0)
speeds.pop(0)
cnt += 1
else:
day += 1
if cnt > 0:
answer.append(cnt)
cnt = 0
answer.append(cnt)
return answer
위의 풀이에서는 speed_up이란 함수를 사용해 몇 번이나 반복해야 각 기능이 100% 이상이 될 것인가를 확인하고 있다. 이번 풀이에서는 day라는 변수를 두어 며칠이 지나야 배포 가능한 상태가 되는지 계산한다.
https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'Algorithm > Accepted' 카테고리의 다른 글
[LeetCode] 49. Group Anagrams(정렬하지 않고 풀 수 있지 않을까?) (0) | 2025.04.13 |
---|---|
[프로그래머스][예산] 정렬을 이용한 풀이 (0) | 2023.01.23 |
[프로그래머스][점프와 순간 이동] DFS를 사용하지 않는 풀이 (0) | 2023.01.22 |
[백준][14888][Python] 파이썬에서 음수 나눗셈에 대해, // (0) | 2023.01.12 |
[백준][14889] Combinations을 이용한 풀이 (0) | 2023.01.05 |
댓글