일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- react
- 타입스크립트
- C++
- 협업
- 백준
- 기초100제
- Java
- Operating System
- 자료구조
- react-redux
- 리덕스장바구니
- 스프링
- Spring
- 정렬
- 일상
- 알고리즘
- Redux
- codeup
- 코드업
- error
- 공부
- js to ts
- OS
- 분할메모리할당
- CPU 스케줄링
- memory
- 파이썬
- web
- 토이프로젝트
- 프로그래머스
- Today
- Total
감자튀김 공장🍟
[프로그래머스/Lv.2] 주식가격 (with 파이썬) 본문
✔ 문제
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42584
✔ 풀이
오답 코드
def solution(prices):
idx = 0
answer = [-1] * len(prices)
for i in range(len(prices)):
answer[i] = len(prices) - (i + 1) # [4, 3, 2, 1, 0]
while prices:
x = prices.pop(0)
for i in range(len(prices)):
if prices[i] < x:
answer[idx] = (i+1)
idx += 1
return answer
예시1과 테스트1만 통과하는 기적의... 코드..
반례에 대해서는 어떠한 것도 대비되어 있지 않은 코드다.
먼저 생각한 방법은 answer 리스트에 각자 최대로 가질 수 있는 초를 저장한 후
prices 요소 중에 x보다 작은 값이 있다면 x와의 인덱스 차를 answer 값에 저장한다.
효율성 테스트 실패
from collections import deque
def solution(prices):
prices = deque(prices)
answer = []
while prices:
x = prices.popleft()
time = 0
for i in range(len(prices)):
if x > prices[i]:
time += 1
break
else:
time += 1
answer.append(time)
return answer
prices를 deque로 변환하여 pop(0) 대신 popleft()를 사용했다. << 이게 더 빠르기 때문에
복잡하게 answer를 최대로 가질 수 있는 초로 저장해놓는 것이 아니라
for문을 돌면서 x가 남은 prices[i]보다 크면 (prices[i]가 x보다 작다. 즉, 주식이 x보다 떨어졌음) time +=1 을 하고 바로 break를 건다. 남은 prices의 값의 초들을 굳이 마저 셀 필요가 없다.
정답 코드
from collections import deque
def solution(prices):
prices = deque(prices)
answer = []
while prices:
x = prices.popleft()
time = 0
for i in prices:
time += 1
if x > i:
break
answer.append(time)
return answer
2번 코드보다 더 간소화 시켰다.
range(len(prices)가 아니라 in prices를 사용하고 if-else문을 if문 하나로 줄였더니 효율성 테스트를 모두 통과할 수 있었다.
✔ 후기
더 쉬운 방법이 있는데 왜 이렇게 돌아가려고 하는지 모르겠다.
그리고 돌아가더라도 맞으면 괜찮은데 예제에만 맞춘 답안이 나오니까 풀다보면 계속 당황스러움의 연속이 된다..
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스/Lv.2] 모음사전 (with 파이썬) (0) | 2023.09.13 |
---|---|
[프로그래머스/Lv.2] 더 맵게 (with 파이썬) (0) | 2023.04.04 |
[프로그래머스/Lv.2] 다리를 지나는 트럭 (with 파이썬) (0) | 2023.04.03 |
[프로그래머스/Lv.2] H-Index (with 파이썬) (0) | 2023.03.24 |
[프로그래머스/Lv.2] 가장 큰 수 (with 파이썬) (0) | 2023.03.23 |