[BOJ] 11501번: 주식

HyeRyun·2021년 2월 25일
0

Baekjoon Online Judge

목록 보기
25/30

✔️ 문제

홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다.

  1. 주식 하나를 산다.
  2. 원하는 만큼 가지고 있는 주식을 판다.
  3. 아무것도 안한다.

홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다.

예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, 6일 때, 주가가 계속 감소하므로 최대 이익은 0이 된다. 그러나 만약 날 별로 주가가 3, 5, 9일 때는 처음 두 날에 주식을 하나씩 사고, 마지막날 다 팔아 버리면 이익이 10이 된다.


[입력]
입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타내는 N개의 자연수들이 공백으로 구분되어 순서대로 주어진다. 날 별 주가는 10,000이하다.

[출력]
각 테스트케이스 별로 최대 이익을 나타내는 정수 하나를 출력한다. 답은 부호있는 64bit 정수형으로 표현 가능하다.

😎 소스 코드

T = int(input())
case = 0
answer = []

while case != T:
	# get input
	day = int(input())
	price = list(map(int, input().split()))
	benefit = 0

	maxVal = price[-1]	
	for stock in price[::-1]:
		if stock > maxVal:
			maxVal = stock
		if stock < maxVal:
			benefit += maxVal - stock

	answer.append(benefit)
	case += 1

# print answer
for ans in answer:
	print(ans)

✊ 문제를 풀고 나서

주식 가격 리스트에서 최대 가격을 체크해서 그 차익만큼 더하는 방향으로 코드를 작성했다. 근데 시간초과로 틀려서 질문하기 카데고리를 봤다. 거기에 시간복잡도를 확 줄이는 아이디어가 있었다. 리스트를 거꾸로 탐방하면서 최대 가격을 설정하고 그 값보다 작으면 차익을 더하는 방법이었다. 오... 어떻게 이렇게 생각이 가능하지? 아이디어를 얻어서 다시 코드를 작성했다. 그랬더니 성공! 나도 효율적인 방식으로 코드를 작성하고 싶다 ㅠㅠ

profile
개발개발

0개의 댓글

관련 채용 정보