코딩 테스트/프로그래머스(LV2)

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

dev-hpk 2024. 12. 5. 17:59
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1. 문제

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

 

제한사항

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

입출력 예

prices answer
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

 

입출력 예 설명

입출력 예 #1

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

2. 오답

function solution(prices) {
    const answer = [];
    let temp;
    prices.reverse().forEach((price, idx) => {
        if (idx === 0) {
            temp = [price, idx]
            answer.unshift(0);
        } else {
            if (price < temp[0]) answer.unshift(idx);
            else answer.unshift(idx - temp[1]);                      
            temp = [price, idx];
        }
    })
    return answer
}

 

temp : [최솟값, 최솟값 인덱스]

배열을 뒤에서부터 순회하며 temp를 갱신하고 temp와 비교하는 연산으로 문제를 풀었다.

결과는 처참하다... 테스트 케이스에만 맞는 풀이였다.

3. 정답 풀이

풀이 전략

  • 중첩 루프 사용해 각 주식 가격이 떨어지기 전까지 유지된 시간을 계산
function solution(prices) {
    const answer = [];
    // 마지막 숫자는 연산이 필요 없기 때문에 length-1까지 순회
    for (let i=0; i<prices.length-1; i++) {
        let temp;
        for (let j=i+1; j<prices.length; j++) {
            // 주식 가격이 떨어진 경우, 유지한 시간(j-i)을 temp에 할당하고 순회 종료
            if (prices[i] > prices[j]) {
                temp = j - i;
                break
            }
        }
        // 주식 가격이 떨어진 경우(temp !== undefined)는 유지한 시간(temp)을 정답 배열(answer)에 추가
        // 주식 가격이 떨어지지 않은 경우(temp === undefined)는 현재 시점부터 종료까지 시간을 정답 배열(answer)에 추가
        temp ? answer.push(temp) : answer.push(prices.length-1-i);
    }
    
    return [...answer, 0]; // 마지막 시점은 연산 필요 없어 0 추가해 리턴
}

 

 

 

테스트 케이스를 통과하는 것에 너무 신경 쓰기보다는, 문제를 이해하는 데 초점을 맞춰서 문제를 풀어야겠다... 😅

 

 

 

[프로그래머스] 땅따먹기 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1. 문제제한사항 행의 개수 N : 100,000 이하의 자연수열의 개수는 4개이고,

dev-hpk.tistory.com

 

 

[프로그래머스] 뒤에 있는 큰 수 찾기 (LV2 - JavaScript)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1. 문제정수로 이루어진 배열 numbers가 있습니다. 배열의 각 원소들에 대해

dev-hpk.tistory.com