원재의 사재기... 문제는 줄여서 쓰도록 하겠습니다.

    1. 원재는 연속된 N일 동안의 물건의 매매가를 예측하여 알고 있다.
    2. 당국의 감시망에 걸리지 않기 위해 하루에 최대 1만큼 구입할 수 있다.
    3. 판매는 얼마든지 할 수 있다.

 

입력3
3
10 7 6  # 가격이 점점 낮아져서 사지 않는 케이스
3
3 5 9   # 3, 5를 사고 9원일때 팔아서 총 9-3=6, 9-5=4 ,10의 이득을 챙김
5
1 1 3 1 2   # 1,1 을 3에 팔고 1을 2에 판다. 총 5의 이득

 

출력

#1 0
#2 10
#3 5

 

문제이해하는 단계부터 힘든건 뭐지.. 아무튼 위와같은 방식으로 코딩을 하고

  • 시간 : 10개 테스트케이스를 합쳐서 C++의 경우 30초 / Java의 경우 30초 / Python의 경우 30초
  • 메모리 : 힙, 정적 메모리 합쳐서 256MB 이내, 스택 메모리 1MB 이내

위의 조건을 통과 해야함..


T=int(input())
A=[]
for i in range(0,T):
    a = int(input())
    b = input().split()
    A.append(b)               #[[1번째 테스트 날짜별 금액],[두번째  테스트날짜별 금액]]
    

for l,i in enumerate(A):# 
    cnt=0
    for j in range(len(i)):
        if int(i[j]) < int(max(i[j:])): # 순차적으로 뒤에 있는 숫자중 제일 큰 값과 비교
            profit = int(max(i[j:]))-int(i[j]) 
            cnt += profit
    print(f"#{l+1} {cnt}")

 

위와 같이 코딩을 해서 직접 테스트 해보면 잘 되는데..

문제 제출을 하니 런타임 에러가 나오네요..ㅠ 아직 갈길이 멀었네


그래서 참지 못하고 정답자들의 코드를 보았다..

T=int(input())
for i in range(0,T):
    a = int(input())
    b = list(map(int,input().split()))
    money=0
    A = b[len(b)-1]
    for j in range(1,len(b)+1):
        if b[-j] < A:
            money = money + A-b[-j]
        else:
            A = b[-j]
    print(f'#{i+1} {money}')

라고 하네요.. 

메모리 영역 공부좀 더 해야겠다...

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

프로그래머스 :: 가장 큰 수  (0) 2022.02.10

+ Recent posts