문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42584

제한 사항

입출력 예

풀이
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
Stack<Integer> result = new Stack<>();
int[] answer = new int[prices.length];
answer[0] = prices.length - 1;
result.push(0);
for (int i = 1; i < prices.length; i++) {
while (!result.isEmpty() && prices[result.peek()] > prices[i]) {
int pre = result.pop();
answer[pre] = i - pre;
}
answer[i] = prices.length - (i + 1);
result.push(i);
}
return answer;
}
}
후기
카테고리가 스택/큐로 되어 있어서 스택은 안 쓰고 풀려고 했다. 일단 이중 for문은 길이가 최대 10만이라 절대 사용하지 말자고 생각해서 단일 for문으로 풀려고 시도했으나 테스트 케이스 추가한 것까지 전부 통과했으나 제출 시에 두 번째부터 뒤로 다 틀렸다. 아무래도 올라갔다 내려갔다를 반복했을 때 처음 부분에 있는 것을 제대로 처리하지 못해서 그랬던 것 같다. 그래서 그냥 스택으로 풀기로 했다. 스택으로 풀면 좋은 점이 제일 처음 만난 내려가는 지점과 가까운 가격들은 당연히 처리가 가능하고 뒤로 멀리 떨어진 숫자들도 나중에 나오는 그 수보다 더 작은 수가 나왔을 때 처리가 가능하다는 점이 있다. 설명이 매우 이상한 것 같지만 문제 자체가 설명이 이상해서 문제 이해하는데도 시간이 오래 걸렸다;; 문제를 이해한다면 자연스레 어떻게 풀 것인지 이해할 수 있다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 2] 오픈채팅방 (0) | 2023.10.30 |
|---|---|
| [프로그래머스][JAVA][Lv. 2] 스킬트리 (0) | 2023.10.29 |
| [프로그래머스][JAVA][Lv. 2] 땅따먹기 (1) | 2023.10.27 |
| [프로그래머스][JAVA][Lv. 0] 대소문자 바꿔서 출력하기 (0) | 2023.10.25 |
| [프로그래머스][Java][Lv. 0] 유한소수 판별하기 (0) | 2023.10.13 |