프로그래머스 주식가격

1. 문제 링크

프로그래머스 주식가격

2. 문제 조건

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항
prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.

3. 컴퓨팅 사고

  • 스택으로 진행하는 방법도 있고, 배열로 진행하여도됩니다. 해당 풀이는 배열을 사용하였습니다.
  • prices배열에 담긴 값들이 초 단위로 기록되었을때 가격이 몇초간 떨어지지않았는지를 구하는 문제였습니다.
  • 순수히 배열로만 사용하여 현재 가격과 그 이후에 일어날 시간의 값들을 비교해주었습니다. 현재의 가격이 뒤에 진행될 가격보다 크게 될 경우 뒤에 진행된 시간- 현재의 시간으로 계산하여 해당 조건들을 빠져나오게됩니다. 필요한값은 떨어지는 시점 즉, 현재의 가격보다 낮은값이 나왔을때 해당 조건을 벗어나게 됩니다.
  • 처음에 주식가격보다 클경우 cnt값을 증가시켜서 arr배열에 담아주었는데, 정확도 면에서 틀린부분이 있었습니다. 기존의 실행은 통과하였으나 다른 테스트케이스를 통과를 하지 못했습니다. 제가 생각하지못한 예외가 있었을것이라고 생각이드는데, 바로 다른방식으로 진행하여 다음에 일어날 시간 - 현재 시간의 조건을 가지고 진행하였습니다.

4. 소스 코드

잘못생각하였던 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class 주식가격 {
public static void main(String[] args) {
int[] prices = {1, 2, 3, 2, 3};
int[] arr = new int[prices.length];

for(int i=0; i<prices.length; i++){
int cnt = 0;
for(int j=i+1; j<prices.length; j++){
if(prices[i] <= prices[j]){
cnt++;
}
}
arr[i] = cnt;
}
for(int i=0; i<arr.length; i++){
System.out.print(arr[i] +" ");
}
}
}

올바른 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class 주식가격 {
public static void main(String[] args) {
int[] prices = {1, 2, 3, 2, 3};
int[] arr = new int[prices.length];

for(int i=0; i<prices.length; i++){
for(int j=i+1; j<prices.length; j++){
if(prices[i] > prices[j]){
arr[i] = j-i;
break;
}
if(j == prices.length-1){
arr[i] = j-i;
}
}
}

for(int i=0; i<arr.length; i++){
System.out.print(arr[i] +" ");
}
}
}