s5unnyjjj's LOG
[홀로 하는 코딩 공부] 택배상자(Python) 본문
프로그래머스
사용 언어: Python
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131704
*** 본 문제를 푸는 과정을 공유하려 한다.
▶ order의 길이가 많이 크기에 해당 부분을 생각하며 코드를 작성한다. 문제 자체는 어렵지 않았기에 그냥 차근차근 작성해보았다.
from collections import deque
def solution(order):
answer = 0
assist_container = deque()
len_order = len(order)
idx = 1
while idx <= len_order:
target = order[0]
if idx == target:
idx += 1
order.pop(0)
answer += 1
elif assist_container and assist_container[-1] == target:
assist_container.pop()
order.pop(0)
answer += 1
else:
assist_container.append(idx)
idx += 1
while assist_container and order:
assist_value = assist_container.pop()
if assist_value == order[0]:
answer += 1
order.pop(0)
else:
break
return answer
▶ 테스트 7,9,10에서 시간초과가 났다. order의 길이가 큰게 원인이다. 해당 부분을 해결하기 위해 코드를 다시 살펴본다. 보다보니 시간초과를 안 나게 하려고 deque를 사용하였는데, 입력으로 받는 order는 여전히 배열이다. order의 길이가 커서 시간초과가 났을 거라 판단하여 order 역시 deque 형태로 변형해준다.
from collections import deque
def solution(order):
answer = 0
order = deque(order)
assist_container = deque()
len_order = len(order)
idx = 1
while idx <= len_order:
target = order[0]
if idx == target:
idx += 1
order.popleft()
answer += 1
elif assist_container and assist_container[-1] == target:
assist_container.pop()
order.popleft()
answer += 1
else:
assist_container.append(idx)
idx += 1
while assist_container and order:
assist_value = assist_container.pop()
if assist_value == order[0]:
answer += 1
order.popleft()
else:
break
return answer
▶ 통과다!! 심지어 다른 테스트 케이스 소요 시간도 대폭 줄었다. deque를 잊지말자.
>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.
>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.
>> 긴 글 읽어주셔서 감사합니다.
반응형
'Algorithm > Python' 카테고리의 다른 글
[홀로 하는 코딩 공부] 퍼즐 게임 챌린지 (Python) (4) | 2024.09.10 |
---|---|
[홀로 하는 코딩 공부] 연속 부분 수열 합의 개수 (Python) (0) | 2024.07.01 |
[홀로 하는 코딩 공부] 206. Reverse Linked List(Python) (0) | 2024.05.28 |
[홀로 하는 코딩 공부] 012. Merge Two Sorted Lists(Python) (0) | 2024.05.27 |
[홀로 하는 코딩 공부] 234. Palindrome Linked List(Python) (0) | 2024.05.18 |
Comments