본문 바로가기
백준

백준 11501 주식

by 콩순이냉장고 2023. 12. 19.

문제 URL : https://www.acmicpc.net/problem/11501

 

11501번: 주식

입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타

www.acmicpc.net

문제 접근법 : 주식하나사서 제일비싼가격에 팔아야 하는문제입니다.

 

만약 주식이

3 2 5 10 7 9 8 10 이와같은형태에 있을때

3,2,5는 10이될때 팔면되고

7,9,8도 10이될때 팔면됩니다

 

그렇다면 어떻게 탐색하면 될까요? 뒤에서 탐색을 하는게 가장좋습니다.

뒤에서 탐색한다면 차라리 입력을 거꾸로 바꿔야겠죠?

그렇다면

10 8 9 7 10 5 2 3

이 된다면 처음 왼쪽이 가장 크다고 가정할때 이것보다 더크거나 같은수가 나오면

지금까지 봤던것들을 가장 왼쪽을 기준으로 다팔면됩니다.

그리고 다시 기준을 크거나 같은수의 기준으로 두고 다시 탐색해서 마지막 오른쪽까지 합니다. 그런데 문제점은

마지막 오른쪽 3에서 끝나서 10을 못팔게됩니다. 그렇기때문에 임시로 마지막에 무한대를 넣어줌으로써 팔지못하는경우가 없도록 만듭니다.

 

소스코드 : 

import sys
input = sys.stdin.readline

test = int(input())
for _ in range(test):
    n = int(input())
    l = list(map(int,input().split()))
    l.reverse()
    t = 10000000000000000
    l.append(t)
    left = 0
    res = 0
    for i in range(len(l)):
        if l[left]<=l[i]:
            for k in range(left,i):
                res+=l[left]-l[k]
            left=i
    print(res)

 

궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.

'백준' 카테고리의 다른 글

백준 15903 카드 합체 놀이  (0) 2023.12.19
백준 1213 팰린드롬 만들기  (0) 2023.12.19
백준 1943 동전분배  (0) 2023.12.14
백준 18427 함께 블록 쌓기  (0) 2023.12.13
백준 16493 최대 페이지 수  (0) 2023.12.13