[프로그래머스] - 주식가격 (javascript)

최재원·2022년 3월 15일
0
post-thumbnail


문제 설명

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

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

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

문제 이해

prices 배열에 담겨있는 각 주식 가격이 몇초동안 떨어지지 않는지 구해야한다.
일어 날 수 있는 경우의 수를 생각하면
1. 현재 자리의 주식 가격이 다음 자리의 주식 가격보다 낮을 경우,
2. 현재 자리의 주식 가격이 다음 자리의 주식보다 클 경우,
3. 현재 자리의 주식이 마지막 자리일 경우
이렇게 세가지 이다. 이 경우의 수를 구하기 위해 배열의 크기만큼 for문을 돌리고, 현재 자리의 주식 가격 값을 담을 변수와, 비교 할 주식 가격(현재 자리 + 1)을 담을 변수, 가격이 떨어지지 않은 시간을 담을 변수를 만들어준다.
그러고나서 while문으로 배열 크기만큼만 돌리는 큰 조건을 설정하고 세부적으로 세가지의 경우의 수를 if문에 조건을 만들어 진행한다.


수도 코드

  1. prices의 n번째에 있는 주식 가격이 n+1, n+2 ... 보다 큰지 비교하여 몇초동안 가격이 떨어지지 않는지 계산 해야한다.
  2. prices 배열 크기만큼 for문을 돌리고, n[i] 값은 stack에 저장, 비교대상인 j는 i + 1 값을 넣어준다.
  3. while문은 배열 크기만큼 진행한다., 세가지 조건의 if문을 계산했다.
  4. 나의 주식이 다음 주식보다 작거나 같은 경우, 다음 주식 가격보다 큰 경우, 마지막 주식일 경우의 조건을 계산 하여 나온 값을 결과 배열에 push 해준다.

나의 코드

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]))

정리

자료구조의 스택문제이다.

profile
https://github.com/jaewon1676

0개의 댓글