초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.
입출력 예 설명
prices 배열에 담겨있는 각 주식 가격이 몇초동안 떨어지지 않는지 구해야한다.
일어 날 수 있는 경우의 수를 생각하면
1. 현재 자리의 주식 가격이 다음 자리의 주식 가격보다 낮을 경우,
2. 현재 자리의 주식 가격이 다음 자리의 주식보다 클 경우,
3. 현재 자리의 주식이 마지막 자리일 경우
이렇게 세가지 이다. 이 경우의 수를 구하기 위해 배열의 크기만큼 for문을 돌리고, 현재 자리의 주식 가격 값을 담을 변수와, 비교 할 주식 가격(현재 자리 + 1)을 담을 변수, 가격이 떨어지지 않은 시간을 담을 변수를 만들어준다.
그러고나서 while문으로 배열 크기만큼만 돌리는 큰 조건을 설정하고 세부적으로 세가지의 경우의 수를 if문에 조건을 만들어 진행한다.
function solution(n){
let result = []
for (let i = 0; i < n.length; i++){
let stack = n[i] // 현재 주식 가격
let j = i + 1 // 비교 할 수의 index
let temp = 0; // 가격이 떨어지지 않은 시간
while(j < n.length + 1){ // j < 6 이면 진행
if (stack <= n[j]){ // 1. 나의 주식 가격이 다음 주식 가격보다 작거나 같으면 통과.
temp += 1;
j += 1;
continue; // if문 끝냄 while문으로
}
else if (temp == 0 && stack > n[j]){ // 2. 나의 주식 가격이 다음 주식 가격보다 크면 종료.
temp = 1;
result.push(temp);
temp = 0;
break; // while문 끝냄
}
else if (temp == 0 && j == n.length){ // 3. 마지막 주식이면 0 반환.
console.log(j)
result.push(temp);
break; // while문 끝냄
}
result.push(temp)
temp = 0;
break;
}
}
return result;
}
console.log(solution([1, 2, 3, 2, 3]))
자료구조의 스택문제이다.