Posts 주식가격 [Python]
Post
Cancel

주식가격 [Python]

URL : https://programmers.co.kr/learn/courses/30/lessons/42584

문제 설명

  • 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한 사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

문제 풀이

  • 문제 설명이 너무 대충(?) 되어있어서 이해하는데 더 오래걸린듯 하다.
  • 일단, 가장 마지막은 0이될수밖에 없다. 마지막 주식가격은 가격이 0초동안 안떨어졌으니 그래서 return 위에 append(0)을 해줌
  • i와 j로 prices의 index를 돌면서 서로 가격 비교를 해주고 떨어지지 않은 시간이니, 기존의(i) 주식가격이 비교할(j) 주식가격보다 작거나 같으면 answer에 +1를 하게 하였다.
  • 그 외에 j가 i보다 크면 for문이 break 걸리게 해두었는데, 해당 지문이 이해되지 않아서 좀 오래걸렸다.
  • break를 거는 이유는 '3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.' 라는 지문인데, 가격이 떨어지면 거기서 끝나는 것이다.
  • 그래서 [1, 2, 3, 2, 3, 1] -> [5, 4, 1, 2, 1, 0]이 나오게 된다.
    • 처음 1초는 뒤로 쭉 가격이 떨어지지 않음 총 5초
    • 두번째 2는 4초쨰에 가격이 떨어짐 2->3 (1초), 3->2 (2초), 2->3 (3초), 3->1 (4초)
      • 문제는 2->3 (3초) 부분인데 기준점이되는 2초때의 가격인 2로 생각하면 가격이 떨어진게 아님
    • 세번째 3은 3->2 로 떨어지며 여기서 끝이지만, 위의 내용인 1초 뒤에 가격이 떨어지니 1초간 가격이 떨어지지않는것으로 보는것.
  • 위의 방식 떄문에 기준가격이 비교 가격보다 커지면 for문을 break를 해야함
  • 빈 리스트를 만들고 append 하기도하고 빈 리스트에 [0]을 을 넣고, 해당 인덱스에 +1를 하는 방법도 있음
  • 원래는 2중 for문을 쓰라는 의도는 아닌거같은데, 이렇게 해도 효율성은 통과됨..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 빈리스트 append
def solution(prices):
    ls = []
    for i in range(len(prices) - 1):
        answer = 0
        for j in range(i, len(prices) - 1):
    #         print(prices[i], prices[j])
            if prices[i] <= prices[j]:
                answer += 1
            else:
                break
        ls.append(answer)
    ls.append(0)
    return ls
1
2
prices = [1, 2, 3, 2, 3]
solution(prices)
1
[4, 3, 1, 1, 0]
1
2
prices = [1, 2, 3, 2, 3, 1]
solution(prices)
1
[5, 4, 1, 2, 1, 0]
1
2
3
4
5
6
7
8
9
10
11
12
# index +
def solution(prices):
    answer = len(prices) * [0]
    for i in range(len(prices) - 1):
 
        for j in range(i, len(prices) - 1):
    #         print(prices[i], prices[j])
            if prices[i] <= prices[j]:
                answer[i] += 1
            else:
                break
    return answer
1
2
prices = [1, 2, 3, 2, 3]
solution(prices)
1
[4, 3, 1, 1, 0]
1
2
prices = [1, 2, 3, 2, 3, 1]
solution(prices)
1
[5, 4, 1, 2, 1, 0]
1
This post is licensed under CC BY 4.0 by the author.