현재 자바스크립트는 풀이 가능 언어에 없습니다.
문제
초 단위로 기록된 주식가격이 담긴 배열 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개의 댓글