SW Expert Academy - 1859. 백만 장자 프로젝트

2024. 4. 17. 21:17코테 준비!

#문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1

 

 

대학과제 제외하고 오랜만에... 진짜 오래 걸렸던 문제입니다..

문제이해, 코딩 사고력 부터 꽉 막혔는데

친구의 도움 + 힌트를 통해 해결한 문제

3 일

1일차 : 10만원

2일차 : 7만원

3일차 : 6만원

원재씨는 미래를 볼 수 있는 능력이있다..

최대한 이득을 보면 얼만큼 이득을 볼것인가.

5번에서

1일차 : 1만원

2일차 : 1만원

3일차 : 3만원 -> 2만원

4일차 : 1만원

5일차 : 2만원 -> 3만원

만약 변경사항이 있다면 3일차에 파는것보다 5일차에 파는것이 더 좋다.

t = int(input())
for i in range(t):
    n = int(input())
    a = input().split(" ")
    a = list(a)
    sum = 0
    maxi = int(a[-1])
    for j in range(len(a)-1,-1,-1):
        if j==0:
            break
        else:
            if int(a[j-1])>maxi: 
                maxi = int(a[j-1])
            else:
                sum += maxi - int(a[j-1])
    s = '#{0} {1}'.format(i+1, sum)
    print(s)

1. 반복할 정수 입력을 받습니다.

2. 가격 금액을 입력을 받고. 리스트(배열)로 변환해 줍니다.

3. 이익값을 sum = 0으로 초기화 해주고

4. maxi = int(a[-1]) a 배열의 마지막(오른쪽)을 넣어줍니다.

   # 처음에 이 부분에서 엄청 오래 걸렸어요... sort로 정렬을할까..? 왼쪽부터 하나씩...? 진짜 어려웠는데

5. for j in range(len(a)-1, -1, -1) range를 이해 못하시면 range함수를 검색해서 한 번 더 확인 해보시면 좋을 거 같아요!

6. if j==0 이 부분 나중에 설명하겠습니다.

7. if int(a[j-1]) > maxi 경우 maxi를 바꿔줍니다. 

이런 흐름으로 흘러간다고 생각하시면 편해요!

코드가 너무 안 풀리면

직접 문을 열고 if 안으로 들어가 보는 것도 좋다고 생각합니다!

마지막으로 6번에서 if j==0 부분에서

for j in range(len(a)-1, -1, -1) 에서

3 2 1 순으로 빠지는데 마지막 1부분에서 앞부분이 비교할 게 없어서 다시 마지막 오른쪽과 비교하는 문제가 생겨서 추가했습니다. 저 부분이 없으면 출력값 이상하게 나왔거든요!

 

GPT 피드백!