https://school.programmers.co.kr/learn/courses/30/lessons/42584
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 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 |
댓글