728x90
※ 해당 문제의 링크는 여기입니다. ※
Queue를 활용하여 문제를 해결하였습니다.
※효율성 테스트가 있습니다. 혼자서 푸실 분들은 유의해주세요.※
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
문제만 보고 헷갈릴 수 있습니다.
질문하기에 자세히 작성해주신 분이 있으셨습니다. 감사합니다. (링크)
알고리즘
굉장히 간단한 문제입니다.
배열로도 충분히 해결할 수 있는 문제입니다.
하지만 스택으로 문제를 해결하려고 했지만, 스택을 자주 사용해보지 않아
잘 몰라, 그나마 조금이라도 더 아는 Queue로 문제를 해결하였습니다.
public int getTimeWhenFalls(int currentPrice, Queue<Integer> leftStocks) {
int i = 0;
for (int price : leftStocks) {
i++;
if (price < currentPrice) {
break;
}
}
return i;
}
메소드명을 어떻게 지어야 할지 몰라 아무렇게 지었습니다.
기본적으로 카운트를 해주는 변수, i는 계속 +1을 끊임없이 합니다.
이는 시간이 흘렀음을 표현합니다.
현재 가격보다 작은 값이 존재한다면 break를 사용하여 i값에 더 이상 변화하지 않도록 합니다.
public int[] solution(int[] prices) {
Queue<Integer> stockPrices = new ArrayDeque<>();
for (int price : prices) {
stockPrices.add(price);
}
int i = 0;
int[] result = new int[prices.length];
while (!stockPrices.isEmpty()) {
int currentPrice = stockPrices.poll(); // 삭제 및 값 가져옴
int countPriceFalls = getTimeWhenFalls(currentPrice, stockPrices); // 가격이 떨어지기까지 버틴 시간
result[i++] = countPriceFalls;
}
return result;
}
큐에 모든 배열 값을 옮겨 담은 후, 큐가 빌 때 동안 반복합니다.
poll 메소드로 큐에서 가장 첫 번째에 있는 값을 반환 및 삭제합니다.
그리곤 아까 작성한 메소드를 호출하여 언제까지 버틸 수 있는지 판단합니다.
그 후, result 배열에 값을 저장합니다.
전체 소스코드
import java.util.*;
class Solution {
public int[] solution(int[] prices) {
Queue<Integer> stockPrices = new ArrayDeque<>();
for (int price : prices) {
stockPrices.add(price);
}
int i = 0;
int[] result = new int[prices.length];
while (!stockPrices.isEmpty()) {
int currentPrice = stockPrices.poll(); // 삭제 및 값 가져옴
int countPriceFalls = getTimeWhenFalls(currentPrice, stockPrices); // 가격이 떨어지기까지 버틴 시간
result[i++] = countPriceFalls;
}
return result;
}
public int getTimeWhenFalls(int currentPrice, Queue<Integer> leftStocks) {
int i = 0;
for (int price : leftStocks) {
i++;
if (price < currentPrice) {
break;
}
}
return i;
}
}
추가로
코드가 매우 단순합니다.
자바를 조금이라도 아시거나, 알고리즘 문제를 자주 푸신 분들이라면 금방 해결하실 수 있으십니다.
이상입니다.
'공부 > 알고리즘, 자료구조' 카테고리의 다른 글
[프로그래머스] 디스크 컨트롤러 (0) | 2022.02.19 |
---|---|
[프로그래머스] 더 맵게 (0) | 2022.02.18 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2022.02.16 |
[자료구조] 우선순위 큐와 힙 (0) | 2022.02.15 |
[프로그래머스] 프린터 (0) | 2022.02.15 |