📘요구 사항 정리
- 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때
- 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
📌 제약 조건
- s의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
📌 문제 분석
- 배열의 index가 초 시점인 것 같다.
- 문제 해석은 다음과 같다.
- 배열 0의 값이 1달러 일때, 배열 1의 값은 2이기 때문에 가격이 떨어지지 않았다.
- 배열 1의 값이 2달러 일때, 배열 3의 값은 3이기 때문에 가격이 떨어지지 않았다.
- 배열 3의 값이 3달러 일대, 배열 4의 값은 2이기 때문에 1초간 가격이 떨어지지 않았다.
- 배열 1의 값 1달러는 1,2,3,4 초간 맨 마지막 까지 가격이 떨어지지 않았고,
- 배열 2의 값 2달러는 2,3,4초간 마지막 까지 가격이 떨어지지 않았고,
- 배열 3의 값은 1초 뒤에 가격이 떨어지기 때문에, 그 시간 1초 동안 가격이 떨어지지 않았다.
- 배열 4의 값은 1초 뒤 가격이 현재 가격보다 크기 때문에 가격이 떨어지지 않았다.
- 배열 5의 값은 마지막 이기 때문에 0초로 넣어준다.
📌 구현코드
아래는 예시 데이터이다.
{1, 2, 3, 2, 3};
package pra.lv2.주식가격;
public class answer_1 {
public static void main(String[] args) {
int [] prices = {1, 2, 3, 2, 3};
prices = solution(prices);
for(int data : prices){
System.out.print(data + " ");
}
}
public static int[] solution(int[] prices) {
//각 값 s의 가격은 1 ~ 10,000이하 자연수이다.
//prices의 길이는 2 이상 ~ 100,000 이하 이다.
int [] count = new int [prices.length];
for(int i=0; i<prices.length;i++){
int validData = prices[i];
//i+1부터 하면 i의 다음 순서부터 차례대로 비교할 수 있다.
for(int j=i+1;j<prices.length;j++){
//현재 위치의 값보다 다음값이 크다면 가격이 유지 된 것이다.
//
if(validData<=prices[j]){
//해당 되는 위치에 값을 더해준다.
count[i]++;
} else if(validData>prices[j]){
count[i]++;
break;
}
}
}
return count;
}
}
📌 구현코드 해설
- 비교할 값을 int validData = prices[i]; 를 통해서 꺼내준다.
- 현재 값은 다음 값들과 비교해야 하기 때문에 2중 for문을 사용했다.
- for(int j=i+1;j<prices.length;j++)
- 위 식을 사용하게 되면 현재 값을 제외한 다음 값들을 비교할 수 있을 것이다.
- if(validData<=prices[j])
- 안쪽 for문을 통해서 현재 데이터보다 다음 데이터의 값이 크거나 같으면 가격이 유지 된 것이다.
- 해당되는 배열에 ++를 통해서 값을 올려준다.
- else if(validData>prices[j])
- 위 조건문은, validData = 현재 비교하려는 값, pirces [j] 다음 값
- 현재값이 다음 값보다 크다는 뜻은, 다음 값일때 값이 줄어든 다는 말이다.
- 현재 데이터는 다음 데이터일때 값이 줄긴 하겠지만, 현재 시간 동안은 유지 된 것 이기 때문에 count++를 해준 후에 종료 한다.
'코딩테스트' 카테고리의 다른 글
[ 프로그래머스 ] 같은 숫자는 싫어 (0) | 2025.02.18 |
---|---|
[ 프로그래머스 ] 컨트롤 제트 (0) | 2025.02.18 |
[ 프로그래머스 ] 괄호 회전하기 (0) | 2025.02.13 |
[ 프로그래머스 ] 짝지어 제거하기 (0) | 2025.02.13 |
[ 프로그래머스 ] 올바른 괄호 (0) | 2025.02.11 |