문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
pricesreturn
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
입출력 예 설명
- 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
- 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
- 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
- 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
stack으로 바꾸자 어디까지 안 떨어져있는지를 확인
1차시도
class Solution {
public int[] solution(int[] prices) {
int leng = prices.length;
int[] answer = new int[leng];
//답안의 길이 생성
int keepingMoneyTime = 0;
/*
어떻게 해야하나
1 2 3 2 3
1 -> 2 3 2 3 떨어지지 않음 ++ ++ ++ ++ ... 4
2 -> 3 2 3 떨어지지 않음 ++ ++ ++ ... 3
3 -> 2 3 바로 떨어지는데 1이나옴 1초간 떨어지지 않는다는 것 -> ++
2 -> 3 떨어지지 않음 ++
3 비교대상 없음 0
*/
/*
sudo
현재 값이 다음 값과 비교해서 작다 -> 1초동안 유지한다 1
현재 값이 다음 값과 비교해서 같거나 크다 -> 떨어지지 않음 -> ++
*/
for(int i = 0; i < leng; i++)
{
int currentValue = prices[i];
for(int j = i+1; j < leng; j++)
{
if(currentValue < prices[j]){
keepingMoneyTime++;
break;
}
else keepingMoneyTime++;
}
answer[i] = keepingMoneyTime;
}
return answer;
}
}
2차시도 -> keepingMoneyTime이 누산되어서 for문 안쪽에 넣고 초기화
class Solution {
public int[] solution(int[] prices) {
int leng = prices.length;
int[] answer = new int[leng];
//답안의 길이 생성
/*
어떻게 해야하나
1 2 3 2 3
1 -> 2 3 2 3 떨어지지 않음 ++ ++ ++ ++ ... 4
2 -> 3 2 3 떨어지지 않음 ++ ++ ++ ... 3
3 -> 2 3 바로 떨어지는데 1이나옴 1초간 떨어지지 않는다는 것 -> ++
2 -> 3 떨어지지 않음 ++
3 비교대상 없음 0
*/
/*
sudo
현재 값이 다음 값과 비교해서 작다 -> 1초동안 유지한다 1
현재 값이 다음 값과 비교해서 같거나 크다 -> 떨어지지 않음 -> ++
*/
for(int i = 0; i < leng; i++)
{
int keepingMoneyTime = 0;
int currentValue = prices[i];
for(int j = i+1; j < leng; j++)
{
if(currentValue > prices[j]){
keepingMoneyTime++;
break;
}
else
{
keepingMoneyTime++;
}
}
answer[i] = keepingMoneyTime;
}
return answer;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 더 맵게 (0) | 2021.04.02 |
---|---|
[프로그래머스] - 여행경로 (0) | 2021.03.31 |
[백준 온라인 저지] - 베스트셀러 (0) | 2021.03.26 |
[프로그래머스] - 오픈채팅방 (0) | 2021.03.23 |
[프로그래머스] - 카펫 (0) | 2021.03.22 |