현재 자바스크립트는 풀이 가능 언어에 없습니다.
문제
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
- [1, 2, 3, 2, 3] -> [4, 3, 1, 1, 0]
- [5, 8, 6, 2, 4, 1] -> [3, 1, 1, 2, 1, 0]
입출력 예 설명
- 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
- 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
- 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
- 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
- 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
문제 해결 방법
- 문제의 취지는 스택을 통한 풀이이지만, 이중
for
문으로도 정확성 및 효율성 통과되었습니다. (자바, 파이썬3) - 마지막 원소를 제외한 모든 원소에 시작시간 1초를 부여합니다. 마지막 원소는 이후 진행 시점이 없으므로 0이 되어야 합니다.
- 첫 번째
for
문에서, 특정 원소의 가격이 그 다음 시간의 가격보다 작다면 그대로 다음 반복을 진행합니다. - 특정 원소의 가격보다 그 다음 시간의 가격이 같거나 크다면 두 번째
for
문을 진행합니다. - 특정 원소의 가격보다 낮아지는 구간이 나타날 때 까지 시간을
1
증가시킵니다. 낮아지는 구간이 나타난다면break
하고 진행합니다.
코드
function solution(prices) { let answer = new Array(prices.length).fill(0) for(let i = 0, len = prices.length - 1; i < len; i++) { answer[i] = 1 if(prices[i] <= prices[i + 1]) { for(let j = i + 1; j < len; j++) { if(prices[i] > prices[j]) break else answer[i] += 1 } } } return answer }
참고 – Python3
def solution(prices): answer = [0 for i in range(len(prices))] for i in range(len(prices) - 1): answer[i] = 1 if prices[i] <= prices[i+1]: for j in range(i + 1, len(prices) - 1): if prices[i] > prices[j]: break else: answer[i] += 1 return answer
0개의 댓글