programmers 주식가격
처음에 문제를 이해하지 못해 당황했었지만 입출력 예를 보고 어떤 것을 구하는 것인지 알 수 있었습니다. 간단하게 얘기를 하자면 각각의 주식가격 이후 더 낮은 주식가격이 나올 때의 시간(1초 단위로 주식가격 나옴)을 배열에 넣어 구하는 문제였습니다.
저는 Queue를 이용하여 풀었는데요. 간략하게 정리하면 다음과 같습니다.
- 주어진 시간 배열을 Queue에 담는다
- Queue에서
poll()
를 이용해 수를 하나 뽑는다 - 남은 Queue 내에 돌면서 시간(
time
)을 1씩 증가시키며 뽑았던 수보다 작은 수를 만나면break
한다 - 반복문 밖에서
time
을 List에 넣는다. - 2~4까지의 과정을 Queue가 비워질 때까지 반복한다. 물론 할때마다
time
은 0으로 초기화
class Solution {
public int[] solution(int[] prices) {
Queue<Integer> queue = new LinkedList<>();
List<Integer> timeArray = new ArrayList<>();
for (int price : prices) {
queue.offer(price);
}
while (!queue.isEmpty()) {
int num = queue.poll();
int time = 0;
for (Integer integer : queue) {
time++;
if (integer < num) {
break;
}
}
timeArray.add(time);
}
return timeArray.stream().mapToInt(i -> i.intValue()).toArray();
}
}
요즘 코드를 짤 때 ArrayList
를 많이 사용하는데 그렇다보니 배열보다 선호하게 되네요. 그렇다보니 반환형이 int[]
이면 List<Integer>
를 그에 맞게 바꾸어줘야 하는데요. 위에 보는 바와 같이 리스트.stream().mapToInt(i -> i.intValue()).toArray()
를 활용하면 쉽게 바꿀 수 있습니다!
'Algorithm > problem solving' 카테고리의 다른 글
Today's Algorithm(2018-11-05) (0) | 2018.11.05 |
---|---|
Today's Algorithm(2018-11-04) (0) | 2018.11.04 |
Today's Algorithm(2018-10-31) (0) | 2018.10.31 |
Today's Algorithm(2018-10-30) (0) | 2018.10.30 |
Today's Algorithm(2018-10-29) (0) | 2018.10.29 |