๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/131704
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์์ฌ๋ ํ๋ฐฐ์์๋ฅผ ํธ๋ญ์ ์ฃ๋ ์ผ์ ํฉ๋๋ค. ์์ฌ๊ฐ ์ค์ด์ผ ํ๋ ํ๋ฐฐ์์๋ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉฐ 1๋ฒ ์์๋ถํฐ n๋ฒ ์์๊น์ง ๋ฒํธ๊ฐ ์ฆ๊ฐํ๋ ์์๋๋ก ์ปจํ ์ด๋ ๋ฒจํธ์ ์ผ๋ ฌ๋ก ๋์ฌ ์์ฌ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ์ปจํ ์ด๋ ๋ฒจํธ๋ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์งํ์ด ๊ฐ๋ฅํด์ ๋ฒจํธ์ ๋์ธ ์์๋๋ก(1๋ฒ ์์๋ถํฐ) ์์๋ฅผ ๋ด๋ฆด ์ ์์ต๋๋ค. ํ์ง๋ง ์ปจํ ์ด๋ ๋ฒจํธ์ ๋์ธ ์์๋๋ก ํ๋ฐฐ์์๋ฅผ ๋ด๋ ค ๋ฐ๋ก ํธ๋ญ์ ์ฃ๊ฒ ๋๋ฉด ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฐฐ๋ฌํ๋ ์์์ ํ๋ฐฐ์์๊ฐ ์ค๋ ค ์๋ ์์๊ฐ ๋ง์ง ์์ ๋ฐฐ๋ฌ์ ์ฐจ์ง์ด ์๊น๋๋ค. ๋ฐ๋ผ์ ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ๋ฏธ๋ฆฌ ์๋ ค์ค ์์์ ๋ง๊ฒ ์์ฌ๊ฐ ํ๋ฐฐ์์๋ฅผ ์ค์ด์ผ ํฉ๋๋ค.
๋ง์ฝ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋งจ ์์ ๋์ธ ์์๊ฐ ํ์ฌ ํธ๋ญ์ ์ค์ด์ผ ํ๋ ์์๊ฐ ์๋๋ผ๋ฉด ๊ทธ ์์๋ฅผ ํธ๋ญ์ ์ค์ ์์๊ฐ ๋ ๋๊น์ง ์ ์ ๋ค๋ฅธ ๊ณณ์ ๋ณด๊ดํด์ผ ํฉ๋๋ค. ํ์ง๋ง ๊ณ ๊ฐ์ ๋ฌผ๊ฑด์ ํจ๋ถ๋ก ๋ ์ ๋ ์ ์์ด ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ถ๊ฐ๋ก ์ค์นํ์์ต๋๋ค. ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ ์ ๋ค๋ก ์ด๋์ด ๊ฐ๋ฅํ์ง๋ง ์ ๊ตฌ ์ธ์ ๋ค๋ฅธ ๋ฉด์ด ๋งํ ์์ด์ ๋งจ ์์ ์์๋ง ๋บ ์ ์์ต๋๋ค(์ฆ, ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํ ์์๋ถํฐ ๊บผ๋ด๊ฒ ๋ฉ๋๋ค). ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ๋ฅผ ์ด์ฉํด๋ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์๋๋ก ์์๋ฅผ ์ฃ์ง ๋ชปํ๋ค๋ฉด, ๋ ์ด์ ์์๋ฅผ ์ฃ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์์ฌ๊ฐ 5๊ฐ์ ์์๋ฅผ ์ค์ด์ผ ํ๋ฉฐ, ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์๋ ค์ค ์์๊ฐ ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ค ๋ฒ์งธ, ์ธ ๋ฒ์งธ, ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค์ฏ ๋ฒ์งธ ๋์ธ ํ๋ฐฐ์์ ์์์ธ ๊ฒฝ์ฐ, ์์ฌ๋ ์ฐ์ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ์์๋ฅผ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ณด๊ดํฉ๋๋ค. ๊ทธ ํ ๋ค ๋ฒ์งธ ์์๋ฅผ ํธ๋ญ์ ์ฃ๊ณ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์ ์ธ ๋ฒ์งธ ์์ ๋นผ์ ํธ๋ญ์์ฃ์ต๋๋ค. ๋ค์์ผ๋ก ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ค์ด์ผ ํ์ง๋ง ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์์๋ ๋ ๋ฒ์งธ ์์๋ฅผ, ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์๋ ๋ค์ฏ ๋ฒ์งธ ์์๋ฅผ ๊บผ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์์ ์์๋ ์ค์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํธ๋ญ์๋ 2๊ฐ์ ์์๋ง ์ค๋ฆฌ๊ฒ ๋ฉ๋๋ค.
ํ๋ฐฐ ๊ธฐ์ฌ๋์ด ์ํ๋ ์์ ์์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด order๊ฐ ์ฃผ์ด์ก์ ๋, ์์ฌ๊ฐ ๋ช ๊ฐ์ ์์๋ฅผ ์ค์ ์ ์๋์ง return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ order์ ๊ธธ์ด ≤ 1,000,000
- order๋ 1์ด์ order์ ๊ธธ์ด ์ดํ์ ๋ชจ๋ ์ ์๊ฐ ํ ๋ฒ์ฉ ๋ฑ์ฅํฉ๋๋ค.
- order[i]๋ ๊ธฐ์กด์ ์ปจํ ์ด๋ ๋ฒจํธ์ order[i]๋ฒ์งธ ์์๋ฅผ i+1๋ฒ์งธ๋ก ํธ๋ญ์ ์ค์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ ์ถ๋ ฅ ์
| order | result |
| [4, 3, 1, 2, 5] | 2 |
| [5, 4, 3, 2, 1] | 5 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
- ๋ชจ๋ ์์๋ฅผ ๋ณด์กฐ ์ปจํ ์ด๋ ๋ฒจํธ์ ๋ชจ๋ ๋ฃ๊ณ , ์ญ์์ผ๋ก ํ๋์ฉ ๋นผ์ ํธ๋ญ์ ์ฃ์ต๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
import java.util.*;
class Solution {
public int solution(int[] order) {
// ํธ๋ญ์ ์ ์ฌํ ์์์ ์
int answer = 0;
// order์ ๊ธธ์ด
int len = order.length;
// order์ ์ธ๋ฑ์ค ์์น
int orders = 0;
// ๋ณด์กฐ ์ปจ๋ฒ ์ด์ด ์ญํ ์ ์คํ ์์ฑ
Stack<Integer> stack = new Stack<>();
// ๋ฐ๋ณต๋ฌธ์ ํตํด ์์ ์ ์ฌ
for (int i = 1; i <= len; i++) {
// ๋ฐ๋ก ์ ์ฌํ ์ ์์ผ๋ฉด
if(orders < len && i == order[orders]) {
answer++;
orders++;
// ์ผ๋จ ๋ณด์กฐ ์ปจ๋ฒ ์ด์ด์ ์ ์ฌ
} else {
stack.push(i);
}
// ์คํ์์ ์ฐ์์ผ๋ก ๊บผ๋ผ ์ ์์ ๋๊น์ง ๊บผ๋ด๊ธฐ
while (orders < len && !stack.isEmpty() && stack.peek() == order[orders]) {
stack.pop();
answer++;
orders++;
}
}
// ๋จ์ ์คํ ์ฒ๋ฆฌ (for ๋๋ ๋ค์๋ ๋ ์ ์ฌํ ์ ์์ผ๋ฉด ๊ณ์ ์งํ)
while (orders < len && !stack.isEmpty() && stack.peek() == order[orders]) {
stack.pop();
answer++;
orders++;
}
// ์ ๋ต ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, 1๋ถํฐ N๊น์ง ์์๊ฐ ์ฐจ๋ก๋ก ๋ค์ด์ค๊ณ ํธ๋ญ์๋ ์ฃผ์ด์ง order ์์๋๋ก๋ง ์ค์ด์ผ ํ๋ค๋ ์ ์ฝ์ ํ์ธํ๋ค. ์ปจ๋ฒ ์ด์ด์์ ๊ณง๋ฐ๋ก ์ค์ ์ ์์ผ๋ฉด ์์๋ก ์์๋์๋ค๊ฐ ๋์ค์ ๊บผ๋ด์ผ ํ๋ฏ๋ก, “๋์ค์ ๋ฃ์ ๊ฒ์ด ๋จผ์ ๋์จ๋ค” ํน์ฑ์ ๊ฐ์ง ์คํ(java.util.Stack) ์ด ์ ํํ ๋ง๋๋ค๊ณ ํ๋จํ๋ค.
์กฐ๊ฑด์ ๋ถ์ํด ๋ณด๋ ํต์ฌ์ ๋ ๊ฐ์ง๋ค. ์ฒซ์งธ, ์ปจ๋ฒ ์ด์ด์์ ์์๋ฅผ ํ๋ ๋ฐ์ ๋ ๋ฐ๋ก ์ค์ ์ ์์ผ๋ฉด ์คํ์ push ํด์ผ ํ๋ค. ๋์งธ, ์คํ ๋งจ ์๊ฐ ๋ค์์ผ๋ก ์ค์ด์ผ ํ ์์์ ๊ฐ๋ค๋ฉด ๋ง์ง ์์ ๋๊น์ง ์ฐ์ํด์ pop ํด์ผ ํ๋ค. ์์ ์ฒ๋ผ ์คํ ์๋จ์ด ์ฐ์์ผ๋ก order์ ๋งค์นญ๋๋ ๊ตฌ๊ฐ์ด ์๊ธฐ๋ฏ๋ก, ๋จ๋ฐ์ฑ ๋น๊ต๊ฐ ์๋๋ผ while ๋ฃจํ๋ก ๊ฐ๋ฅํ ๋งํผ ๋น์ฐ๋ ํจํด ์ด ํ์ํ๋ค๊ณ ๋ณด์๋ค.
์๋ฃ๊ตฌ์กฐ ์ ํ์ ๋ฌธ์ ์ LIFO ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ํ์ค Stack ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ๊ตฌํ ๊ด์ ์์ ํ์ํ ์ฐ์ฐ์ push, pop, peek, isEmpty ๋ค ๊ฐ์ง์ ์ง์คํ๋ฉด ์ถฉ๋ถํ๋ค. (Stack ์ด ๋๊ธฐํ ์ค๋ฒํค๋๊ฐ ์๋๋ผ๋ ๋ณธ ๋ฌธ์ ์ ์ ๋ ฅ ๊ท๋ชจ์์๋ ์ฑ๋ฅ ์ ํ๊ฐ ์ฒด๊ฐ๋์ง ์๋๋ค๊ณ ํ๋จํ๋ค.)
๋ก์ง ํ๋ฆ์ ๋ค์ ๋ถ๋ณ์์ ๋งค ์์๋ง๋ค ์ ์งํ๋๋ก ์ค๊ณํ๋ค.
- ์ปจ๋ฒ ์ด์ด์์ ์์ i๋ฅผ ํ๋ ๋ฐ๋๋ค.
- ์ผ๋จ ์คํ์ push(i) ํ๋ค.
- ์คํ์ด ๋น์ด ์์ง ์๊ณ ์คํ ๋งจ ์๊ฐ order[idx] ์ ๊ฐ๋ค๋ฉด while๋ก ์ฐ์ pop ํ๋ฉฐ ์ค์ ๊ฐ์์ idx๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
์ด ํจํด์ ์ ์งํ๋ฉด ์ปจ๋ฒ ์ด์ด ์ฒ๋ฆฌ๊ฐ ๋๋ ๋ค์๋ ์คํ์ ๋จ์ ์์๋ค์ด ์ถ๊ฐ๋ก ๋ง์๋จ์ด์ง ๊ฒฝ์ฐ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๋ํ ๋ชจ๋ ๋น๊ต์์ idx < n ๊ฒฝ๊ณ ์ฒดํฌ๋ฅผ ๋จผ์ ์ํํด order ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ์ค๋ฅ๋ฅผ ์๋ฐฉํ๋ค.
์ฒ์ ์๋์์๋ ํ ํด์ ์ต๋ ํ ๋ฒ๋ง pop ํ๊ฑฐ๋, ๋ฉ์ธ ๋ฃจํ ์ข ๋ฃ ํ ์คํ์ ๋จ์ ์์๋ฅผ ์ถ๊ฐ๋ก ๋น์ฐ์ง ์์ ๋๋ฝ์ด ์๊ธธ ์ ์์๋ค. ์ด๋ฅผ ์ฐ์ pop + ์ข ๋ฃ ํ ์์ฌ ์คํ ์ฒ๋ฆฌ๋ก ๋ณด์ํด ์ ๋ต ๊ฐ์๋ฅผ ์ ํํ ์ง๊ณํ๋๋ก ํ๋ค.
'๐ฆ ํ๋ก๊ทธ๋๋จธ์ค > ๐๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋์ถฉ ๋ง๋ ์ํ (0) | 2025.10.20 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2025.10.17 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ ๋ฐ๋จน๊ธฐ (0) | 2025.10.13 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋คํธ ๊ฒ์ (0) | 2025.10.02 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ฒ๊ฑฐ ๋ง๋ค๊ธฐ (0) | 2025.10.01 |