728x90
문제
코드
# 효율성 1,2,3,4,5 실패
import numpy as np
def solution(prices):
answer = []
prices = np.array(prices)
for i in range(len(prices)-1):
if(prices[i] <= min(prices[i+1:])):
answer.append(len(prices) - i - 1)
else:
answer.append(np.where(prices[i+1:] < prices[i])[0][0] + 1)
answer.append(0)
return answer
역시 적은 데이터에서 numpy 는 너무 무거운 것이다. 효율성 전체 실패
# 효율성 3 실패
from collections import deque
def solution(prices):
prices = deque(prices)
answer = []
num = prices.popleft()
length = len(prices)
while(length != 0):
count = 0
for i in range(length):
if num <= prices[i]:
count += 1
else:
count += 1
break
answer += [count]
num = prices.popleft()
length -= 1
answer.append(0)
return answer
deque 를 사용하여 코딩 해보았지만 아쉽게 효율성 3에서 실패하였다.
# 성공
def solution(prices):
answer = [0] * len(prices)
for i in range(len(prices)-1) :
for j in range(i+1, len(prices)) :
answer[i] += 1
if prices[i] > prices[j] :
break
return answer
3차시도 : 성공
코드풀이
이 문제는 얼마나 효율적으로 잘 코딩하느냐에 초점을 두었던 문제인 것 같다.
기준이 되는 숫자와 그 이후의 숫자들을 비교해 기준 숫자보다 떨어지면 그 간격을 계산해야 한다.
첫 번째 : answer 배열을 주어지는 prices 의 길이만큼 0을 채워 만든다.
두 번째 : 반복문 시작( prices 길이 - 1 만큼. -1을 하는 이유는 어차피 마지막은 0이기 때문)
세 번째 : i+1부터 시작하는 반복문 시작. (다음 숫자부터 비교해야 함)
네 번째 : 0이었던 배열 요소를 +1 씩 증가.
다섯 번째 : 만약 기준 숫자가 다음 숫자보다 크면 바로 종료하고 다음 기준숫자 이동!
이렇게 간단히 짤 수 있는 것을 너무 돌아왔다....
Numpy --> Deque --> 결국 for...
300x250
'코딩코딩' 카테고리의 다른 글
[프로그래머스] level1 완주하지 못한 선수 (0) | 2020.09.02 |
---|---|
[프로그래머스] level2 더 맵게 - 파이썬(Python) (0) | 2020.08.28 |
[프로그래머스] level2 다리를 지나는 트럭 - 파이썬(Python) (0) | 2020.08.27 |
[프로그래머스] level1 문자열 내 마음대로 정렬하기 - 파이썬(Python) (0) | 2020.08.22 |
[프로그래머스] level1 크레인 인형뽑기 게임 - 파이썬(Python) (0) | 2020.08.19 |