본문 바로가기
개발공부_Blog/Algorithm

프로그래머스-주식가격

by 소팡팡 2024. 11. 18.

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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

 

제한사항

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

 

풀이과정

prices의 배열 요소 값들을 비교하기.

  • prices의 첫번째 요소와 다음 요소 ~ 끝까지 비교하기
  • 자신보다 큰 값이 나오면 가격이 떨어지지 않은 것이므로 period에 +1을 해줌
  • 자신보다 값이 떨어졌다면, 반복문을 나옴

 

function solution(prices) {
  var stack = [];
  for (let i = 0; i < prices.length; i++) {
    let period = 0;

    for (let j = i + 1; j < prices.length; j++) {
      if (prices[i] <= prices[j]) {
        period += 1;
      }
    }
    stack.push(period);
  }
  return stack;
}

 

TEST CASE Failed

가격이 떨어지는 경우의 코드 구현이 미흡

주어진 예시는 대체로, 모든 경우의 수를 보여주므로 잘 해석해야 한다. [ 1, 2, 3, 2, 3 ] 의 데이터로 봤을 때,

  • 1,2,3 의 순서는 값이 떨어지지 않는 경우
  • 3,2의 순서는 값이 떨어진 경우인데, 이 경우에 나는 예시를 보지 않고, 3→2 로 떨어졌으니 가격이 유지되지 않았다고 생각 0이 나오는 게 당연하다고 생각했닼ㅋㅋ……. 그래서 문제를 못느꼈는데. 테스트케이스에서 작살남.
  • 아래 2번째 답이 이해가 안갔는데, 예시를 보고 나니 코드 구현에 문제가 있다고 판단하게 되었다.
console.log(solution([1, 2, 3, 2, 3])); //[4, 3, 1, 1, 0]
console.log(solution([5, 4, 3, 2, 1])); //[1, 1, 1, 1, 0]

 

Correct CODE

추가해야 할 코드

배열의 모든 값을 비교할 때 period는 +1이 되어야 하고, 이후 가격이 떨어지게 되면 반복문을 나가야 한다.

function solution(prices) {
  var result= [];
 
  for (let i = 0; i < prices.length; i++) {
    let period = 0;

    for (let j = i + 1; j < prices.length; j++) {
      // 기본적으로 peroid는 1이 되고 난 다음에 가격 비교가 들어가야함
      period += 1;
      if (prices[i] > prices[j]) {
        break;
      }
    }
    result.push(period);
  }
  return result;
}

 

'개발공부_Blog > Algorithm' 카테고리의 다른 글

프로그래머스 - 프로세스  (0) 2024.11.17
Data Structure - Tree  (0) 2024.10.29
Data Structure - Hash Table  (0) 2024.10.29
Data Structure - Stack  (0) 2024.10.29
Data Structure - Queue  (0) 2024.10.29

댓글