๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/42584
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์ด ๋จ์๋ก ๊ธฐ๋ก๋ ์ฃผ์๊ฐ๊ฒฉ์ด ๋ด๊ธด ๋ฐฐ์ด prices๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ธฐ๊ฐ์ ๋ช ์ด์ธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- prices์ ๊ฐ ๊ฐ๊ฒฉ์ 1 ์ด์ 10,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- prices์ ๊ธธ์ด๋ 2 ์ด์ 100,000 ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
prices | return |
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- 1์ด ์์ ์ โฉ1์ ๋๊น์ง ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค.
- 2์ด ์์ ์ โฉ2์ ๋๊น์ง ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค.
- 3์ด ์์ ์ โฉ3์ 1์ด๋ค์ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง๋๋ค. ๋ฐ๋ผ์ 1์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
- 4์ด ์์ ์ โฉ2์ 1์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค.
- 5์ด ์์ ์ โฉ3์ 0์ด๊ฐ ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ต๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
class Solution {
public int[] solution(int[] prices) {
// ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์์ฑ
int[] answer = new int[prices.length];
// i : ํ์ฌ ๊ฐ๊ฒฉ์ ์์
for (int i = 0; i < prices.length; i++) {
// j : ๋ค์ ์์ ๋ถํฐ ๋๊น์ง ํ์ธ
for (int j = i+1; j < prices.length; j++) {
// ๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์์ ๋ ์๊ฐ 1์ด ๊ฒฝ๊ณผ
answer[i]++;
// ๋ง์ฝ ๊ฐ๊ฒฉ์ด ๋จ์ด์ก๋ค๋ฉด
if (prices[i] > prices[j]) {
// ๋ฐ๋ณต๋ฌธ ์ข
๋ฃ
break;
}
}
}
// answer ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
Stack์ ์ฌ์ฉํ์ง ์๊ณ ๋ฐฐ์ด๋ง์ผ๋ก๋ ๋ฌธ์ ๋ฅผ ํ ์ ์์ ๊ฒ ๊ฐ์๋ค.
๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ๊ฐ ์๋ฆฌ ์๋ฅผ ๊ณ์ 1์ฉ ์ฆ๊ฐํ๋ฉด ์ ๋ต์ ๋ฐํํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
Stack์ ํ์ฉํ ์ฝ๋
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
// ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์์ฑ
int[] answer = new int[prices.length];
// ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ Stack ์์ฑ (๊ฐ๊ฒฉ์ด ๋จ์ด์ง์ง ์์ ์์ ์ ์ฅ)
Stack<Integer> stack = new Stack<>();
// ์ฃผ์ ๊ฐ๊ฒฉ ์ํ
for (int i = 0; i < prices.length; i++) {
// Stack์ด ๋น์ด์์ง ์๊ฑฐ๋ ํ์ฌ ๊ฐ๊ฒฉ์ด ์ด์ ๊ฐ๊ฒฉ๋ณด๋ค ํฐ ๊ฒฝ์ฐ
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
// ๋จ์ด์ง ์์ ๊น์ง ๊ฑธ๋ฆฐ ์๊ฐ ๊ณ์ฐ
answer[stack.peek()] = i - stack.peek();
// Stack์์ ์ ๊ฑฐ
stack.pop();
}
// ๋จ์ด์ง์ง ์์ ์์ ์ ์ฅ
stack.push(i);
}
// Stack์ ๋จ์ ์๋ ์ธ๋ฑ์ค ํ์ธ
while(!stack.isEmpty()) {
// ๋ง์ง๋ง๊น์ง ์ ์ง๋ ์๊ฐ ๊ณ์ฐ
answer[stack.peek()] = prices.length - stack.peek() - 1;
// Stack์์ ์ ๊ฑฐ
stack.pop();
}
// answer ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
Stack์ ํ์ฉํ ๋ฐฉ๋ฒ์ ์ด๋ป๊ฒ ์ ๊ทผํด์ผํ ์ง ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ํ์ด ๋ฐฉ๋ฒ๋ค์ ์ฐพ์๋ณด๋ฉด์ ์ดํดํ๊ณ ๋์ด๊ฐ๋ค.
Stack์ ์ ํ์ฉํ ์ ์๋ค๋ฉด ๋ฌธ์ ๋ฅผ ๋ ํธํ๊ฒ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
'๐งฉ ํ๋ก๊ทธ๋๋จธ์ค > ๐ต ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ ๋ฌธ์์ด (0) | 2025.04.15 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ (1) | 2025.04.14 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (2) | 2025.04.10 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ก์ธ์ค (1) | 2025.04.08 |
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์์ (1) | 2025.04.07 |