Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Git
- Workbench
- 코테
- python기초
- 그리디
- 자료구조
- 참고X
- 인스타
- c언어
- 도커
- 5장
- git기초
- 스택
- 4장
- DP
- c언어 제어문
- #코린이 #코딩 #할 수 있다
- git 오류
- 데베시 1주차
- python자료형
- 인텔리제이
- 코딩테스트
- 1주차(1)
- python기본
- c언어 기본
- 최단거리
- 운체 1주차
- git오류
- 파이썬 알고리즘 인터뷰
- 백준
Archives
- Today
- Total
하루살이 개발자
[프로그래머스] Lv2. 택배상자(by Python) 본문
문제
코딩테스트 연습 - 택배상자 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
- 보조 컨베이어 벨트(코드에선 li)에 1부터 넣으면서, 제거할 것이 생기면(order 값이랑 같으면) while 반복문을 통해 제거
- 첫번째 while문은 order의 갯수만큼 반복
- 결국, order의 최종 인덱스가 답인걸 알 수 있음
처음 짠 코드는 왜 안됐을까?
- 그냥 단순히 보조 콘테이너에 값을 넣고, 빼는 방식으로 진행했다.
- visited를 둔 이유는, 이전에 제거한 숫자인지 확인하기 위해 추가했다.
- order의 길이가 최대 10^6인데 for문을 여러번 돌리니 당연히 시간초과 날 수밖에..
- 이런 레파토리 문제가 많이 보이는데, for문만 좋아하지 말고 while문을 최대한 활용해서 필요한 부분에만 반복문을 사용하자.
코드
처음에 푼 코드 - 테케 반절이 시간초과 났다.
from collections import deque
def solution(order):
answer = 0
idx = 0
visited = []
container = deque()
for i in order:
if i in container and container:
t = container.pop()
if t == i:
answer += 1
visited.append(t)
else:
break
else:
answer += 1
visited.append(i)
for j in range(1, i):
if j not in visited:
container.append(j)
return answer
정답 코드
def solution(order):
answer = 0
li = []
i = 1
idx = 0
while i != len(order)+1:
li.append(i)
while li and li[-1] == order[idx]:
idx += 1
li.pop()
i += 1
return idx
'코딩테스트' 카테고리의 다른 글
[백준] 2023 신기한 소수 (by JAVA) (0) | 2023.08.21 |
---|---|
[프로그래머스] Lv2. 숫자 변환하기(by Python) (0) | 2023.05.25 |
[프로그래머스] Lv2. 두 큐 합 같게 만들기(by Python) - 카카오 2번 문제 (0) | 2023.05.25 |
[프로그래머스] Level4 DP문제(by Python) (0) | 2023.04.15 |
[백준] 19236 청소년 상어 (by Python) (0) | 2023.03.22 |