
📑 1. 문제설명

💡 2. 접근방식
이중for문
현재 인덱스에 있는 요소과 이후 모든 값을 비교하면서 현재 요소가 비교하고 있는 요소보다 커지면 break;를 걸어준다.
그 전까지는 answer[i]++을 해 준다.
현재 요소가 더 크다는 말은 이후에 가격이 떨어졌다는 것을 의미하기 때문이다.
현재 요소가 비교하는 값과 같거나 더 적다면 가격이 유지되거나 오른 것이다.

스택(Stack)
근데 이게 스택/큐 문제라는데 스택으로는 어떻게 풀지? 오잉
그래서 다른 사람들은 어떻게 푸는 지 좀 찾아 봤다.
그냥 이중포문으로 푸는게 더 간단한 것 같다.
prices의 인덱스를 스택에 넣어 주면서 현재 가격과 스택의 가장 위 가격을 비교해준다.
스택이 비어있지 않고, 현재 가격이 스택의 가장 위 가격보다 작으면
바로 가격이 떨어진 지점에서의 시간을 계산하고, stack.pop()을 해 준다.
만약 현재 가격이 스택 맨 위 가격보다 높다면 스택에 현재 인덱스를 넣어 주는 작업을 반복한다.
그러면 가격이 떨어진 지점에서 걸린 시간이 먼저 answer[i]에 채워 진다.
스택 안에 남아있는 인덱스들은 마지막까지 가격이 떨어지지 않은 것이기 때문에 각 가격이 끝까지 떨어지지 않은 기간을 따로 구해준다.
answer[stack.peek()] = prices.length - stack.peek() - 1;
여기서 -1을 해 주는 이유는 마지막 날짜는 이미 계산된 것이므로 제외해 주는 것이다. 주어진 가격의 "기간"은 해당 가격이 떨어지지 않고 유지된 기간을 의미하는데, 끝날 때까지 유지된 상태를 포함하면 안 되기 때문에 마지막 날짜를 제외하고 계산한다.
⭐ 3. 코드
이중 for문
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
// 각 가격에 대해 가격이 떨어지지 않는 시간 계산
for(int i = 0; i < prices.length; i++) {
for(int j = i+1; j < prices.length; j++) {
// 가격이 떨어지지 않으면 시간 증가
answer[i]++;
// 가격이 떨어지면 다음 인덱스 비교
if(prices[i] > prices[j]) {
break;
}
}
}
return answer;
}
}
Stack
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length]; // 답을 담을 배열
Stack<Integer> stack = new Stack<>(); // 가격 인덱스를 담을 스택
// 각 가격에 대해 그 가격이 떨어지지 않는 시간을 계산
for (int i = 0; i < prices.length; i++) {
while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) {
// 스택이 비어있지 않고, 현재 가격이 스택의 가장 위 가격보다 작으면
// 스택에서 하나씩 꺼내면서 계산
answer[stack.peek()] = i - stack.peek(); // 떨어진 지점에서의 시간 계산
stack.pop(); // 스택에서 가격 인덱스 제거
}
stack.push(i); // 현재 가격 인덱스를 스택에 넣음
}
// 스택에 남은 인덱스들에 대해 마지막 가격이 떨어지지 않았으므로 남은 기간을 구함
while (!stack.isEmpty()) {
answer[stack.peek()] = prices.length - stack.peek() - 1;
// 마지막까지 떨어지지 않은 시간 계산
stack.pop(); // 스택에서 제거
}
return answer;
}
}
👉🏻 4. 같은 유형 문제
[프로그래머스] (Java) 다리를 지나는 트럭 (스택/큐)
📑 1. 문제설명💡 2. 접근방식 Queue트럭 진입 로직: 다리의 맨 앞 트럭이 나가고 새로운 트럭이 다리에 올라갈 수 있는지 확인한 후 다리에 추가이동시간: 트럭이 다리 위에 오르면 매 1초마다
awesomepossum.tistory.com
[프로그래머스] (Java) 프로세스 문제풀이 (스택/큐)
1. 문제설명 예제 #1문제에 나온 예와 같습니다. 예제 #26개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실
awesomepossum.tistory.com
[프로그래머스] (Java) 올바른 괄호 문제풀이 (스택/큐)
1. 문제설명2. 접근방식1) 스택을 사용하지 않고 풀기문자열을 순회하며 닫힌 괄호와 열린 괄호의 갯수를 변수에 저장하고 개수가 같으면 true, 틀리면 false 를 반환하는 방법 2) 스택을 사용하여
awesomepossum.tistory.com
[프로그래머스] (Java) 기능개발 (스택/큐)
1. 문제설명프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이
awesomepossum.tistory.com
[프로그래머스] (Java) 같은 숫자는 싫어 문제 풀이 (스택/큐)
1. 문제설명배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거
awesomepossum.tistory.com
'코딩테스트 > 알고리즘베스트' 카테고리의 다른 글
[프로그래머스] (Java) 디스크컨트롤러 (힙/Heap) Feat. 우선순위큐 (26) | 2024.11.13 |
---|---|
[프로그래머스] (Java) 더 맵게 - 스코빌지수 (힙/Heap) Feat. 우선순위큐 (12) | 2024.11.12 |
[프로그래머스] (Java) 다리를 지나는 트럭 (큐) (8) | 2024.11.11 |
[프로그래머스] (Java) 프로세스 문제풀이 (큐) (4) | 2024.11.09 |
[프로그래머스] (Java) 올바른 괄호 문제풀이 (스택) (8) | 2024.11.08 |

📑 1. 문제설명

💡 2. 접근방식
이중for문
현재 인덱스에 있는 요소과 이후 모든 값을 비교하면서 현재 요소가 비교하고 있는 요소보다 커지면 break;를 걸어준다.
그 전까지는 answer[i]++을 해 준다.
현재 요소가 더 크다는 말은 이후에 가격이 떨어졌다는 것을 의미하기 때문이다.
현재 요소가 비교하는 값과 같거나 더 적다면 가격이 유지되거나 오른 것이다.

스택(Stack)
근데 이게 스택/큐 문제라는데 스택으로는 어떻게 풀지? 오잉
그래서 다른 사람들은 어떻게 푸는 지 좀 찾아 봤다.
그냥 이중포문으로 푸는게 더 간단한 것 같다.
prices의 인덱스를 스택에 넣어 주면서 현재 가격과 스택의 가장 위 가격을 비교해준다.
스택이 비어있지 않고, 현재 가격이 스택의 가장 위 가격보다 작으면
바로 가격이 떨어진 지점에서의 시간을 계산하고, stack.pop()을 해 준다.
만약 현재 가격이 스택 맨 위 가격보다 높다면 스택에 현재 인덱스를 넣어 주는 작업을 반복한다.
그러면 가격이 떨어진 지점에서 걸린 시간이 먼저 answer[i]에 채워 진다.
스택 안에 남아있는 인덱스들은 마지막까지 가격이 떨어지지 않은 것이기 때문에 각 가격이 끝까지 떨어지지 않은 기간을 따로 구해준다.
answer[stack.peek()] = prices.length - stack.peek() - 1;
여기서 -1을 해 주는 이유는 마지막 날짜는 이미 계산된 것이므로 제외해 주는 것이다. 주어진 가격의 "기간"은 해당 가격이 떨어지지 않고 유지된 기간을 의미하는데, 끝날 때까지 유지된 상태를 포함하면 안 되기 때문에 마지막 날짜를 제외하고 계산한다.
⭐ 3. 코드
이중 for문
class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; // 각 가격에 대해 가격이 떨어지지 않는 시간 계산 for(int i = 0; i < prices.length; i++) { for(int j = i+1; j < prices.length; j++) { // 가격이 떨어지지 않으면 시간 증가 answer[i]++; // 가격이 떨어지면 다음 인덱스 비교 if(prices[i] > prices[j]) { break; } } } return answer; } }
Stack
import java.util.Stack; class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; // 답을 담을 배열 Stack<Integer> stack = new Stack<>(); // 가격 인덱스를 담을 스택 // 각 가격에 대해 그 가격이 떨어지지 않는 시간을 계산 for (int i = 0; i < prices.length; i++) { while (!stack.isEmpty() && prices[i] < prices[stack.peek()]) { // 스택이 비어있지 않고, 현재 가격이 스택의 가장 위 가격보다 작으면 // 스택에서 하나씩 꺼내면서 계산 answer[stack.peek()] = i - stack.peek(); // 떨어진 지점에서의 시간 계산 stack.pop(); // 스택에서 가격 인덱스 제거 } stack.push(i); // 현재 가격 인덱스를 스택에 넣음 } // 스택에 남은 인덱스들에 대해 마지막 가격이 떨어지지 않았으므로 남은 기간을 구함 while (!stack.isEmpty()) { answer[stack.peek()] = prices.length - stack.peek() - 1; // 마지막까지 떨어지지 않은 시간 계산 stack.pop(); // 스택에서 제거 } return answer; } }
👉🏻 4. 같은 유형 문제
[프로그래머스] (Java) 다리를 지나는 트럭 (스택/큐)
📑 1. 문제설명💡 2. 접근방식 Queue트럭 진입 로직: 다리의 맨 앞 트럭이 나가고 새로운 트럭이 다리에 올라갈 수 있는지 확인한 후 다리에 추가이동시간: 트럭이 다리 위에 오르면 매 1초마다
awesomepossum.tistory.com
[프로그래머스] (Java) 프로세스 문제풀이 (스택/큐)
1. 문제설명 예제 #1문제에 나온 예와 같습니다. 예제 #26개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실
awesomepossum.tistory.com
[프로그래머스] (Java) 올바른 괄호 문제풀이 (스택/큐)
1. 문제설명2. 접근방식1) 스택을 사용하지 않고 풀기문자열을 순회하며 닫힌 괄호와 열린 괄호의 갯수를 변수에 저장하고 개수가 같으면 true, 틀리면 false 를 반환하는 방법 2) 스택을 사용하여
awesomepossum.tistory.com
[프로그래머스] (Java) 기능개발 (스택/큐)
1. 문제설명프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이
awesomepossum.tistory.com
[프로그래머스] (Java) 같은 숫자는 싫어 문제 풀이 (스택/큐)
1. 문제설명배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거
awesomepossum.tistory.com
'코딩테스트 > 알고리즘베스트' 카테고리의 다른 글
[프로그래머스] (Java) 디스크컨트롤러 (힙/Heap) Feat. 우선순위큐 (26) | 2024.11.13 |
---|---|
[프로그래머스] (Java) 더 맵게 - 스코빌지수 (힙/Heap) Feat. 우선순위큐 (12) | 2024.11.12 |
[프로그래머스] (Java) 다리를 지나는 트럭 (큐) (8) | 2024.11.11 |
[프로그래머스] (Java) 프로세스 문제풀이 (큐) (4) | 2024.11.09 |
[프로그래머스] (Java) 올바른 괄호 문제풀이 (스택) (8) | 2024.11.08 |