https://school.programmers.co.kr/learn/courses/30/lessons/42584
문제
문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한 사항
- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
입출력 예
prices | return |
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
소스 코드
# 1
def solution(prices):
n = len(prices)
answer = []
for i in range(n):
idx = 0
for j in range(i+1,n):
if prices[j] < prices[i]: # 현재 주식가격보다 떨어진 경우
idx = j # 떨어진 시점을 idx에 저장하고 종료
break
if idx==0: # 현재 주식가격에서 떨어지지 않은 경우
answer.append(n-i-1) # 전체 길이에서 현재 인덱스를 뺀 값
else:
answer.append(idx-i) # 떨어진 시점에서 현재 인덱스를 뺸 값
return(answer)
풀이 # 1
- 현재의 주식가격은 i번째에 있는 값이고 나머지 주식가격은 j번째에 있는 값
- 현재 주식가격과 나머지 주식가격을 비교해서 가격이 떨어지는 시점을 idx에 저장
- 가격이 떨어졌다면 for문 빠져나오기
- idx가 0이면 가격이 떨어지지 않은 것이므로 전체길이에서 현재 주식가격의 인덱스 빼기
- idx가 0이 아니면 가격이 떨어진 시점이 idx이므로 떨어진 시점에서 현재 인덱스 빼기
# 2
def solution(prices):
n = len(prices)
answer = [0] * n
for i in range(n):
for j in range(i+1, n):
answer[i] += 1
if prices[i] > prices[j]: # 가격이 떨어진 경우
break # for문 종료
return answer
풀이 #2
- 주식가격 길이만큼의 리스트 생성
- 현재 주식가격은 i번째에 있는 값이고 나머지 주식가격은 j번째에 있는 값
- answer 리스트에 1을 더하고 가격이 떨어졌다면 for문을 종료
- 가격이 떨어지지 않았다면 for문으로 돌면서 +1 연산을 진행
처음에는 문제 이해가 안됐었는데 단순하게 생각해보니 현재 인덱스 값과 나머지 인덱스 값을 비교해서 가격이 떨어지기 전까지 시간을 구하는 문제였다. 정확도와 효율성을 모두 테스트하는 문제라서 어렵게 생각했었는데 필요없는 연산을 지우고 주식가격이 떨어지는 순간까지만 연산을 진행하니 의외로 쉽게 풀 수 있었다.
'코딩 문제풀이 💻 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 파이썬] Lv.2 기능개발 (0) | 2024.07.04 |
---|---|
[프로그래머스 / 파이썬] Lv.2 괄호 회전하기 (0) | 2024.07.01 |
[프로그래머스 / 파이썬] Lv.1 가장 많이 받은 선물 (2) | 2024.01.08 |
[프로그래머스 / 파이썬] Lv.1 [PCCP 기출문제] 1번 / 붕대 감기 (1) | 2024.01.07 |
[프로그래머스 / 파이썬] Lv.1 공원 산책 (0) | 2024.01.05 |