https://school.programmers.co.kr/learn/courses/30/lessons/42584
๋ฌธ์
- ์ด ๋จ์๋ก ๊ธฐ๋ก๋ ์ฃผ์๊ฐ๊ฒฉ์ด ๋ด๊ธด ๋ฐฐ์ด prices๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ธฐ๊ฐ์ ๋ช ์ด์ธ์ง๋ฅผ return
์ ํ ์ฌํญ
- prices์ ๊ฐ ๊ฐ๊ฒฉ์ 1 ์ด์ 10,000 ์ดํ์ธ ์์ฐ์
- prices์ ๊ธธ์ด๋ 2 ์ด์ 100,000 ์ดํ
์ ์ถ๋ ฅ ์์
- ์ ๋ ฅ : prices [1, 2, 3, 2, 3]
- ์ถ๋ ฅ : [4, 3, 1, 1, 0]
ํ์ด
n์ด ์์ ์ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ธฐ๊ฐ์ ์๊ธฐ ์ํด์๋ ๋ค์ ๋์ค๋ ๊ฐ๊ฒฉ๋ค๊ณผ ๋น๊ตํด์ผ ํ๋ค. ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์ด์ค for๋ฌธ์ผ๋ก ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์๊ฐ ๋ณต์ก๋๋ O(n^2)์ด๊ณ , ๋ฌธ์ ์ ์ ํ ์ฌํญ์ ๋ณด๋ฉด ๊ธธ์ด๊ฐ 100,000 ์ดํ์ด๋ฏ๋ก ์ต๋ 100,000 * 100,000 = 100,000,000,000 (1000์ต)์ด ๊ฑธ๋ฆฐ๋ค. ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถฐ์ผ ํ๋๋ฐ ์๋ฃ ๊ตฌ์กฐ๊ฐ ํ์ํ๋ค. ๊ฐ๊ฒฉ ๋น๊ต๋ฅผ ํ๋ ๋ฐ, ๊ด์ฌ์ฌ๋ ๋น์ฅ ๋ค์์ ์ฌ ๊ฐ๊ฒฉ์ด ํ์ฌ ๊ฐ๊ฒฉ๊ณผ ์์์ง ํฐ์ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ์ ๊ฐ๊ฒฉ ์ ๋ณด๋ฅผ ์์๋๊ฐ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์คํ์ด ์ ํฉํ๋ค.
- ์คํ
- ์ฝ์ , ์ญ์ , ์กฐํ์ O(1) ์๊ฐ์ด ์์๋๋ค. ๋ฐ๋ผ์ ๋ฌธ์ ์์๋ O(n)์ด ์์๋ ๊ฒ์ด๋ค.
- ์คํ์ prices์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ๋๋ค (๊ฐ๊ฒฉ์ ์ ๋ณด๋ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ์ ์ ์์ผ๋ฏ๋ก ๋ฃ์ง ์๋๋ค.)
- ํ์ฌ ๊ฐ๊ฒฉ์ด top์ ์๋ ์ธ๋ฑ์ค์ ๊ฐ๊ฒฉ๋ณด๋ค ์์์ง ๋น๊ตํ๋ค.
- ์คํ์์ ์ ๊ฑฐํ๊ณ , ์ ๋ต์ ์ด๋ฅผ ๊ณ์ฐํด์ ์ ์ฅํ๋ค.
- ์์ผ๋ฉด ๋ฐ๋ณตํ๋ค.
- ๋๋๋ฉด ํ์ฌ ๊ฐ๊ฒฉ์ ์ธ๋ฑ์ค๋ฅผ ์คํ์ ๋ฃ๋๋ค.
- n๊น์ง ๋ค ๋ณด๊ณ ๋๋ฉด, ๋๋๊ณ ๋๋ฉด ์คํ์ ๋จ์์๋ ์ฃผ์ ๊ฐ๊ฒฉ์ ์ธ๋ฑ์ค๋ค์ด ์๋ค.
- ์ด ๊ณ์ฐํด์ ์ ๋ต์ ์ ์ฅํ๋ค.
๋ฐฑ์ค์ ์ค์นด์ด๋ผ์ธ ์ฌ์ด๊ฑฐ ๋ฌธ์ (https://www.acmicpc.net/problem/1863)์ ๋น์ทํ๋ค.
์ฝ๋
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
Stack<Integer> stack = new Stack<>(); //์ฃผ์ ๊ฐ๊ฒฉ ์ธ๋ฑ์ค ์ ์ฅ
int[] answer = new int[prices.length];
for(int i = 0; i < prices.length; i++) {
while(!stack.isEmpty() && prices[i] < prices[stack.peek()]) { //์๋ก ๋ค์ด์ค๋ ๊ฐ๊ฒฉ์ด ์๋จ์ ์๋ ๊ฐ๊ฒฉ๋ณด๋ค ์์
int idx = stack.pop(); //์คํ์์ ๋นผ์
answer[idx] = i - idx; //์ด ๊ณ์ฐํด์ ์ ๋ต์ ์ ์ฅ
}
stack.push(i); //์คํ์ ๋ฃ๊ธฐ
}
//๋๋๊ณ ๋๋ฉด ์คํ์ ๋จ์์๋ ๊ฒ ์์
for(int idx : stack) {
answer[idx] = prices.length - 1 - idx; //์ด ๊ณ์ฐํด์ ์ ๋ต์ ์ ์ฅ
}
return answer;
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
- ์คํ์์ ๋นผ๋ผ ๋, while(!stack.isEmpty() && ์กฐ๊ฑด) ์ ํจ๊ป ์ฃผ๋๊ฒ ์ข์
- ์คํ์ ๋จ์ ๊ฒ์ ์ฒ๋ฆฌํด์ค์ผ ํ๋ค.
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - n์ง์ ๊ฒ์ (0) | 2023.08.17 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ํธํ ๋์ค (0) | 2023.08.04 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฏธ๋ก ํ์ถ (0) | 2023.08.02 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ํ์ค ๊ฒ์ (0) | 2023.07.27 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฆฌ์ฝ์ณ ๋ก๋ด (0) | 2023.07.26 |