설명한 대로라면 이런 TC에서는 올바른 답을 내지 못할 거 같네요.
답은 15일까요? 39일까요?
11501번 - 주식
설명한 대로라면 이런 TC에서는 올바른 답을 내지 못할 거 같네요.
답은 15일까요? 39일까요?
이론상으로는 최댓값일때까지 산다음 팔고
다시 나머지중 최댓값일때까지 산다음 팔고해야 될 거 같은데
n이 백만까지라 최댓값을 계속해서 찾는 시간이 너무 오래걸리는군요..
O(n^2) 시간이 걸립니다
그런데 어차피 최댓값을 찾아도 그 뒤에 나오는 주식들은 최댓값이 몇이든간에
다시 처음부터 사고팔고를 해야되니까 결국에는 뒤에 나오는 최댓값에 따라서 또 최대이익이 결정되겠지요
따라서 뒤에서 부터 하나씩 빼가면서 탐색을하게되면
값이 커지는 시점은 뒤의 최댓값이 갱신되는 때이고
값이 작아지는 시점은 그때마다 최댓값 - a[i]를 최대이익에 합해주면 됩니다
....1 2 3 4 2 1 1
이런 경우
맨 처음 최댓값을 1로 갱신
그 다음 탐색에서 1을 발견. 같은 경우는 사고팔고 의미가 없으므로
그 다음 탐색으로 넘어가서 2를 발견 최댓값을 2로 갱신
그 다음 탐색에서 4를 발견 최댓값을 4로 갱신
이후 3 2 1 은 계속 작아지므로
그 말인즉슨 4보다 작으니까 계속 사뒀다가 4에서 파는게 이익이라는 뜻이므로
최대이익+=(4-3)+(4-2)+(4-1)
따라서 총 최대이익은 6
이 방식으로 하면 O(n)에 해결할 수 있을 겁니다
뒤에서 부터 하는 풀이 넘 멋있네욤
댓글을 작성하려면 로그인해야 합니다.
toto 6년 전 1
안녕하세요.
문제 풀이 중 어느 부분에 오류가 있는지 확인이 어려워서 문제 푸신분들께 도움을 구합니다.
주식 주가 떨어지는 시점에 이전에 구입한 주식을 모두 파는 로직으로 구현되어 있습니다.
9%까지 정답이네요..
고수님들 검토 부탁드립니다.!!