programmers.co.kr/learn/courses/30/lessons/42584
문제 요약
prices 정수 배열이 주어진다. 각 요소는 1 이상, 1만 이하인 자연수. 배열의 길이는 2 이상 10만 이하.
ex. [1, 2, 3, 2, 3]
각 요소는 주식 가격. 주식 가격이 떨어지지 않은 기간은 몇 초인지 return 하자.
ex1) 예시 배열 [1, 2, 3, 2, 3] 을 보면,
1-2-3-2-3
1 보다 가격이 낮아지지 않은 시간은 4초
2-3-2-3
2보다 가격이 낮아지지 않은 시간은 3초
3-2-3
3보다 가격이 낮아지지 않은 시간은 1초 (1초 뒤에 가격이 떨어짐)
2-3
2보다 가격이 낮아지지 않은 시간은 1초
3
3보다 가격이 낮아지지 않은 시간은 0초 (다음 가격 정보다 없음)
ex2) 예시 배열 [3, 5, 1, 2, 6, 2, 7, 2, 1] (내가 만든 무작위 정수 배열)
3-5-1-2-6-2-7-2-1
3보다 가격이 낮아지지 않은 시간은 2초
5-1-2-6-2-7-2-1
5보다 가격이 낮아지지 않은 시간은 1초
1-2-6-2-7-2-1
1보다 가격이 낮아지지 않은 시간은 6초
2-6-2-7-2-1
2보다 가격이 낮아지지 않은 시간은 5초
6-2-7-2-1
6보다 가격이 낮아지지 않은 시간은 1초
2-7-2-1
2보다 가격이 낮아지지 않은 시간은 3초
7-2-1
7보다 가격이 낮아지지 않은 시간은 1초
2-1
2보다 가격이 낮아지지 않은 시간은 1초
1
1보다 가격이 낮아지지 않은 시간은 0초
문제 해결 방법 생각하기
- 인풋 배열과 같은 크기의 보조 배열(int [] solution)을 만든다.
- 현재 배열을 2중 순회 하면서 현재 요소와 비교 대상 요소들을 비교하고,
- 만약 현재 요소가 비교 대상보다 작거나 같다면 solution 배열의 인덱스를 증가시킨다.
import java.util.Arrays;
public class StockPrice1 {
public static void main(String[] args) {
int [] prices = {3, 5, 1, 2, 6, 2, 7, 2, 1};
int [] ans = solution(prices);
System.out.println(Arrays.toString(ans));
}
public static int[] solution(int[] prices) {
int[] answer;
answer = new int[prices.length];
for (int i = 0; i < prices.length; i++) {
int cur = prices[i];
for (int j = i; j < prices.length; j++) {
if(j == prices.length - 1){
answer[j] = 0;
break;
}
if(cur <= prices[j]){
answer[i]++;
}else{
break;
}
}
}
return answer;
}
}
✨다른 풀이
public int [] solution(int [] prices){
int len = prices.length;
int [] answer = new int[len];
int i, j;
for(i = 0; i < len; i++){
for(j = i+1; j < len; j++){
answer[i]++;
//j = i + 1 로 시작하는 대신 미리 증가시켜둔다.
//j = i + 1 이므로, i = len - 1 일 때, j = len 이 되어서 answer 배열의 마지막 요소는 0이 된다.
if(prices[i] > prices[j]){
//현재가격 > 비교대상
break;
}
}
}
return answer;
}
'Algorithms' 카테고리의 다른 글
[Greedy] 미적으로 아름다운 나무 (0) | 2022.10.28 |
---|---|
[Deep Dive] QuickSort (0) | 2020.12.02 |
[프로그래머스] 연습문제 - 기능개발 (0) | 2020.11.30 |
[프로그래머스] 연습문제 - 위장 (0) | 2020.11.30 |