프로그래머스 알고리즘 고득점 Kit 카테고리의 스택/큐 문제 중 레벨 2 주식가격 문제를 풀이했다.
분류는 스택/큐로 되어있으나 리스트를 활용하여 문제 풀이를 했다. 스택 또는 큐를 사용하면 효율성 면에서는 더 좋았을 것 같으나 이번 문제의 경우 리스트를 활용한 풀이도 무리없이 효율성 테스트를 통과하였다.
문제 설명이 뭔가 이상하게 써져 있어서 이해하는데에 시간을 소요한 것 빼고, 문제 풀이는 5분쯤 걸려서 한 것 같다.
+ 다른 사람의 풀이를 보니 다른 사람들도 문제 설명을 이상하게 적어 놓아서 이해하기 힘들었다더라..~
StockPrice.java
package com.example.Programmers.Lv2;
import java.util.ArrayList;
import java.util.List;
/**
* 프로그래머스 Lv2 - 주식가격 문제
* 분류: 스택/큐
*/
public class StockPrice {
public int[] solution(int[] prices) {
List<Integer> answer = new ArrayList<>();
// 이중 for문을 통해 비교할 대상 요소(prevPrice)와 나머지 요소들을 비교하여 가격이 떨어지지 않은 기간(초)를 구한다.
for (int i = 0; i < prices.length - 1; i++) {
int prevPrice = prices[i];
int maintainSec = 0;
for (int j = i + 1; j < prices.length; j++) {
maintainSec++;
// 가격이 떨어졌을 경우 현재 대상과 비교 중지
if (prevPrice > prices[j]) {
break;
}
}
// 가격이 떨어지지 않은 기간(초)를 정답 리스트에 추가
answer.add(maintainSec);
}
// 마지막의 경우 항상 0초간 가격이 떨어지지 않으므로 0을 추가
answer.add(0);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
StockPriceTest.java
package com.example.Programmers.Lv2;
import java.util.ArrayList;
import java.util.List;
/**
* 프로그래머스 Lv2 - 주식가격 문제
* 분류: 스택/큐
*/
public class StockPrice {
public int[] solution(int[] prices) {
List<Integer> answer = new ArrayList<>();
// 이중 for문을 통해 비교할 대상 요소(prevPrice)와 나머지 요소들을 비교하여 가격이 떨어지지 않은 기간(초)를 구한다.
for (int i = 0; i < prices.length - 1; i++) {
int prevPrice = prices[i];
int maintainSec = 0;
for (int j = i + 1; j < prices.length; j++) {
maintainSec++;
// 가격이 떨어졌을 경우 현재 대상과 비교 중지
if (prevPrice > prices[j]) {
break;
}
}
// 가격이 떨어지지 않은 기간(초)를 정답 리스트에 추가
answer.add(maintainSec);
}
// 마지막의 경우 항상 0초간 가격이 떨어지지 않으므로 0을 추가
answer.add(0);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}