[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ
https://school.programmers.co.kr/learn/courses/30/lessons/64062
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
for๋ฌธ(์๊ฐ ์ด๊ณผ), ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(์๊ฐ ์ด๊ณผ)
์นด์นด์ค ๊ณต์ ํด์ค์ ์ด๋ถ ํ์์ ์ด์ฉํ๋ผ๊ณ ์ ํ ์์์ง๋ง, ํ๊ธฐ ์ซ์๋ค. (..)
์ง๋ฌธ ๊ฒ์ํ์ ๋ณด๋, leetcode์ Sliding Window Maximum ๋ฌธ์ ์ ์ ์ฌํ๊ฒ ํ๋ฉด ๋๋ค๊ณ ํ๋ค.
import java.util.*;
class Solution {
public int solution(int[] stones, int k) {
Deque<int[]> deque = new ArrayDeque<>();
int size = stones.length;
int answer = Integer.MAX_VALUE;
for (int i=0; i<k; i++) {
while (!deque.isEmpty() && deque.getLast()[1] < stones[i]) {
deque.removeLast();
}
deque.add(new int[]{i, stones[i]});
}
answer = Math.min(answer, deque.getFirst()[1]);
for (int i=k; i<size; i++) {
if (!deque.isEmpty() && deque.getFirst()[0] == i-k) {
deque.removeFirst();
}
while (!deque.isEmpty() && deque.getLast()[1] < stones[i]) {
deque.removeLast();
}
deque.add(new int[]{i, stones[i]});
answer = Integer.min(answer, deque.getFirst()[1]);
}
return answer;
}
}
Deque๋ฅผ ์ด์ฉํ๋ค. (์์๋ฅผ ์๋ค๋ก ๋ฃ๊ณ ๋บ ์ ์๋ค.)
์์์๋ถํฐ k๊ฐ๋
1. ์๋ก ๋ค์ด์ค๋ ์์๋ณด๋ค ์์ ๊ฒ๋ค์ ๋ค์์๋ถํฐ ๋นผ์ค๋ค.
(์๋ก ๋ค์ด์ค๋ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ต๋๊ฐ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
2. ์๋ก ๋ค์ด์ค๋ ์์๋ฅผ ๋ฃ์ด์ค๋ค.
3. 1-2๋ฅผ k๋ฒ ๋ฐ๋ณต ํ, Deque์ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์์ ์ ๋ต ๋น๊ต.
(๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ต๋๊ฐ์ด ๋๋ค.)
์ดํ ๋๋จธ์ง ์์๋ค์ ๋ํด
1. Deque์ ๋งจ ์ ์์์ ์ธ๋ฑ์ค๊ฐ ํ์ฌ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ์ง์ด๋ค.
2. ์๋ก ๋ค์ด์ค๋ ์์๋ณด๋ค ์์ ๊ฒ๋ค์ ๋ค์์๋ถํฐ ๋นผ์ค๋ค.
3. ์๋ก ๋ค์ด์ค๋ ์์๋ฅผ ๋ฃ์ด์ค๋ค.
4. Deque์ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์์ ์ ๋ต ๋น๊ต.
5. 1-4๋ฅผ ์์์ ์๋งํผ ๋ฐ๋ณต.