[프로그래머스] 주식 가격 - JavaScript

2023. 8. 21. 15:56코딩연습

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42584

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 풀이

  • 입력 값으로 들어오는 prices의 배열에서 각각 얼마나 가격이 떨어지지 않은 시간을 재는 문제이다.
  • prices = [1,2,3,2,3] 일때
    • 1은 끝까지 가격이 떨어지지 않아 4
    • 2는 끝까지 가격이 떨어지지 않아 3
    • 3은 바로 다음 1초 뒤에 가격이 떨어져 1
    • 2는 끝까지 가격이 떨어지지 않아 1
    • 3은 가격이 떨어지지 않아 0
  • 문제 해석에 어려움이 조금 있었다.
function solution(prices) {
    const answer = []; // 가격이 떨어지지 않은 기간을 담을 배열.
    
    // 가격에 대한 반복.
    for(let i = 0; i < prices.length; i++){
        let count = 0; // 가격이 떨어지지 않은 횟수를 담을 변수.
        let price = prices[i]; // 기준 값.
        
        // 만약 prices 배열의 마지막이라면 무조건 0 이기 때문에.
        if(i === prices.length - 1) {
            answer.push(0);
            break;
        }
        
        // 기준 값의 다음 값부터 비교를 진행하는 반복문.
        for(let j = i+1; j < prices.length; j++){
            count++; // 무조건 1초는 지나있다고 판단하여 먼저 count를 증가.
            if(price > prices[j]) break; // 만약 기준값이 다음 값보다 크게 되는 경우 반복문 종료.
        }
        // 가격이 떨어지지 않은 횟수를 배열에 저장.
        answer.push(count) 
    }
    
    return answer;
}

 

3. 정리

  • 처음 제공되는 테스트케이스는 쉽게 통과했지만, 채점 결과에서 1번 케이스를 제외하고는 모두 틀렸다고 나와 당황했었다.
  • 다른 테스트케이스를 통해 이 문제에 대해 이해할 수 있었다.
    • 입력 값 : [2, 2, 3, 1, 5] / 출력 값 : [3, 2, 1, 1, 0]
  • 3을 예시로 들면, 다음으로 오는 값이 1 이다. 이는 1초 뒤에 가격이 떨어진다고 생각을 해야한다는 점이었다.