๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/154539
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋ค์ ์๋ ํฐ ์ ์ฐพ๊ธฐ
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ฐ์ต ์นด์นด์คํก ์น๊ตฌํด์! ํ๋ก๊ทธ๋๋จธ์ค ๊ต์ก ์นด์นด์ค ์ฑ๋์ ๋ง๋ค์์ด์. ์ฌ๊ธฐ๋ฅผ ๋๋ฌ, ์น๊ตฌ ์ถ๊ฐ๋ฅผ ํด์ฃผ์ธ์. ์ ๊ท ๊ต์ก ๊ณผ์ ์์์ ๋ฌผ๋ก ๋ค์ํ ์ด๋ฒคํธ ์์์ ๊ฐ์ฅ ๋จผ์ ์๋ ค
school.programmers.co.kr
์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด numbers๊ฐ ์์ต๋๋ค. ๋ฐฐ์ด์ ๊ฐ ์์๋ค์ ๋ํด ์์ ๋ณด๋ค ๋ค์ ์๋ ์ซ์ ์ค์์ ์์ ๋ณด๋ค ํฌ๋ฉด์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ์๋ฅผ ๋ท ํฐ ์๋ผ๊ณ ํฉ๋๋ค.
์ ์ ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์์์ ๋ํ ๋ท ํฐ์๋ค์ ์ฐจ๋ก๋ก ๋ด์ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์. ๋จ, ๋ท ํฐ ์๊ฐ ์กด์ฌํ์ง ์๋ ์์๋ -1์ ๋ด์ต๋๋ค.
์ ํ ์ฌํญ
- 4 ≤ numbers์ ๊ธธ์ด ≤ 1,000,000
- 1 ≤ numbers[i] ≤ 1,000,000
์ ์ถ๋ ฅ ์
| numbers | result |
| [2, 3, 3, 5] | [3, 5, 5, -1] |
| [9, 1, 5, 3, 6, 2] | [-1, 5, 6, 6,-1, -1] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- 2์ ๋ท ํฐ ์๋ 3์
๋๋ค. ์ฒซ ๋ฒ์งธ 3์ ๋ท ํฐ์๋ 5์
๋๋ค. ๋ ๋ฒ์งธ 3 ๋ํ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
5๋ ๋ท ํฐ ์๊ฐ ์์ผ๋ฏ๋ก -1์ ๋๋ค.
์ ์๋ค์ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ผ๋ฉด [3, 5, 5, -1]์ด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- 9๋ ๋ท ํฐ์๊ฐ ์์ผ๋ฏ๋ก -1์
๋๋ค.
1์ ๋ท ํฐ ์๋ 5์ด๋ฉฐ, 5์ 3์ ๋ท ํฐ์๋ 6์ ๋๋ค.
6๊ณผ 2๋ ๋ท ํฐ ์๊ฐ ์์ผ๋ฏ๋ก -1์ ๋๋ค.
์ ์๋ค์ ์ฐจ๋ก๋๋ก ๋ฐฐ์ด์ ๋ด์ผ๋ฉด [-1, 5, 6, 6, -1, -1]์ด ๋ฉ๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
// ์ ๋ต์ ์ ์ฅํ ๋ฐฐ์ด ์์ฑ
int[] answer = new int[numbers.length];
// ๋ฐฐ์ด์ ๋ชจ๋ -1๋ก ์ฑ์
Arrays.fill(answer, -1);
// ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ์คํ
Deque<Integer> stack = new ArrayDeque<>();
// ๋ค์์๋ถํฐ ํ์
for (int i = numbers.length - 1; i >= 0; i--) {
int num = numbers[i];
// ํ์ฌ ์ซ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ๋ค์ ํฐ ์๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์ ๊ฑฐ
while (!stack.isEmpty() && stack.peek() <= num) {
stack.pop();
}
// ์คํ์ด ๋น์ด์์ง ์๋ค๋ฉด, ๋งจ ์์ ๊ฐ์ด '๋ค์ ์๋ ํฐ ์'
if (!stack.isEmpty()) {
answer[i] = stack.peek();
}
// ํ์ฌ ๊ฐ์ ์คํ์ ์ถ๊ฐ
stack.push(num);
}
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, ๊ฐ ์ซ์์ ๋ํด ์์ ๋ณด๋ค ๋ค์ ์๋ ์ซ์ ์ค์์ ์ฒ์์ผ๋ก ์์ ๋ณด๋ค ํฐ ์๋ฅผ ์ฐพ์์ผ ํ๋ค๋ ์ ์ ํ์ ํ๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ์ง๊ด์ ์ผ๋ก๋, ๋ฐฐ์ด์ ์ํํ๋ฉด์ ํ์ฌ ์ซ์ ์ดํ์ ์์๋ค์ ํ๋์ฉ ๋น๊ตํ์ฌ ์์ ๋ณด๋ค ํฐ ์๋ฅผ ์ฐพ์ผ๋ฉด ๋ต์ ์ ์ฅํ๋ ๋ฐฉ์์ด ๋ ์ฌ๋๋ค. ๋ง์ฝ ๋๊น์ง ๊ฐ๋ ํฐ ์๊ฐ ์๋ค๋ฉด -1์ ์ ์ฅํ๋๋ก ํ๋ค. ์ด ๋ฐฉ๋ฒ์ ๊ตฌํ์ด ๋จ์ํ๊ณ ์ง๊ด์ ์ด์ง๋ง, ์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ ์์์ ๋ํด ๋ค์ชฝ์ ๋๊น์ง ํ์ํด์ผ ํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๊ฐ O(N^2)์ด ๋์ด ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ํจ์จ์ฑ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ด๋ ต๋ค. ์ค์ ๋ก ๊ธฐ๋ณธ ํ ์คํธ๋ ํต๊ณผํ์ง๋ง, ์จ์ ํ ์คํธ์์๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด์๋ ๋ถํ์ํ ๋น๊ต๋ฅผ ์ค์ฌ์ผ ํ๋ค. ๊ทธ๋์ ๋ฐฐ์ด์ ๋ค์์๋ถํฐ ๋ณด๋ฉด์, ์คํ์ ํ์ฉํด "๋ค์ ์๋ ํฐ ์" ํ๋ณด๋ค์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ์๊ฐํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ ์คํ์ ํญ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๊ฐ์ด ์ ์ง๋๋๋ก ํ์ฌ, ํ์ฌ ์ซ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ๋ค์ ์คํ์์ ์ ๊ฑฐํ๊ณ , ๋จ์ ์๋ ์คํ์ ๋งจ ์ ๊ฐ์ด ๊ณง ํ์ฌ ์ซ์์ "๋ค์ ์๋ ํฐ ์"๊ฐ ๋๋ค. ๋ง์ฝ ์คํ์ด ๋น์ด ์๋ค๋ฉด ๋ค์ ์์ ๋ณด๋ค ํฐ ์๊ฐ ์๋ ๊ฒ์ด๋ฏ๋ก -1๋ก ์ฒ๋ฆฌํ๋ฉด ๋๋ค. ์ด ๋ฐฉ์์ ๊ฐ ์์๊ฐ ํ ๋ฒ push, ํ ๋ฒ pop ๋๋ฏ๋ก ์ ์ฒด ์๊ฐ ๋ณต์ก๋๋ O(N)์ ํด๊ฒฐํ ์ ์์ด ํจ์จ์ฑ ํ ์คํธ๋ ํต๊ณผํ ์ ์๋ค.
๊ฒฐ๊ตญ ์ด ๋ฌธ์ ๋ ๋จ์ํ ์์ ํ์ ๋ฐฉ์์ผ๋ก๋ ํ ์ ์์ง๋ง, ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ํจ์จ์ฑ์ด ์ค์ํ ์ํฉ์์๋ ๋จ์กฐ ๊ฐ์ ์คํ์ ํ์ฉํ๋ ๊ฒ์ด ์ต์ ์ ํ์ด์์ ์ ์ ์์๋ค.
'๐ฆ ํ๋ก๊ทธ๋๋จธ์ค > ๐๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ์คํจ์จ (1) | 2025.09.05 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] n์ง์ ๊ฒ์ (2) | 2025.09.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ฐฉ๋ฌธ ๊ธธ์ด (4) | 2025.08.25 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋คํธ์ํฌ (6) | 2025.08.21 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ชจ์์ฌ์ (2) | 2025.08.20 |