프로그래머스 - 주식가격
카테고리: 스택/큐
레벨: 2
언어: Java
문제
입출력 예시
풀이
간단히 머리로 그림을 그려보면 이해하기 쉬운 문제였다. (풀기는 난감했지만...)
그림을 그려보며 이해해 보자.
먼저 1초일 때 생각을 해보면 1초일때 주식 가격은 1이다.
이 가격은 주어진 5초가 지날 때까지 1 이하로 떨어지지 않는다. 여기서 문제의 핵심을 알 수 있는데 현재 시간에서의 주식 가격이 남은 시간 동안 얼마나 떨어지지 않고 유지되는지 알아보는 문제이다.
2초일 때를 생각해 보면 주식의 가격은 2이고 5초가 될 때까지 주식 가격은 2 이하로 떨어지지 않는다.
3초일 때를 생각해 보면 주식의 가격은 3이고 4초가 될 때 주식의 가격이 2로 떨어지고 그다음 시간에 3초로 가격이 상승한다.
5초가 될 때까지 주식 가격인 3이 1번 유지되기 때문에 1 값이 배열에 저장된다.
위의 방법을 5초가 될 때까지 진행해 보면 4초일 때 1, 5초일 때 0이 배열에 저장된다.
public int[] solution(int[] prices) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < prices.length; i++) {
queue.add(prices[i]);
}
int[] answer = new int[prices.length];
int index = 0;
while (!queue.isEmpty()) {
int currentPrice = queue.poll();
for (int i = (prices.length - queue.size()); i < prices.length; i++) {
if (currentPrice > prices[i]) {
answer[index]++;
break;
} else if (currentPrice <= prices[i]) {
answer[index]++;
}
}
index++;
}
return answer;
}
코드를 살펴보면 먼저 주식의 가격을 담을 Queue를 하나 생성해 주고 주식 가격을 담아준다.
그런 다음 주식 가격의 길이만큼 배열을 하나 생성해 준다.
현재 주식의 가격과 주어진 주식의 가격을 하나씩 비교해 보며 현재 주식의 가격이 작으면 배열에서 index에 위치한 값을 1 증가시켜 주고, 현재 주식 가격이 더 크다면 반복문을 벗어나 주식 가격을 새로 받아온다.
public int[] solution(int[] prices) {
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < prices.length; i++) {
queue.add(prices[i]);
}
int[] answer = new int[prices.length];
int index = 0;
while (!queue.isEmpty()) {
int first = queue.poll();
for (int j = queue.size(); j > 0; j--) {
int other = queue.poll();
if (first <= other) {
count++;
queue.add(other);
} else {
queue.add(other);
}
}
answer[i] = count;
count = 0;
i++;
}
return answer;
}
내가 작성한 풀이를 보면 정답 코드와 비슷하게 생각했지만 실수한 부분이 있었다.
queue에서 값을 하나씩 뽑아서 비교하고 다시 queue에 넣어주기 때문에 while문이 길어지고 정답이 이상하게 나오는 문제가 있었다.
주어진 예제는 정답이 잘 나오지만 다른 테스트 케이스에서는 모두 오류가 발생했다. 효율성 검증에서도 문제가 발생한 것을 보아 아마도 while문에서 발생한 문제인 것 같다.
'알고리즘 공부' 카테고리의 다른 글
프로그래머스 - 체육복 (0) | 2023.12.13 |
---|---|
프로그래머스 - 가장 큰 수 (0) | 2023.12.12 |
프로그래머스 - 다리를 지나는 트럭 (0) | 2023.12.05 |
알고리즘 - 하노이 탑 (0) | 2023.12.05 |
프로그래머스 - 프로세스 (0) | 2023.12.04 |