bit가 눈 앞에서 왔다갔다

Py) SWEA 1859 백만장자 프로젝트 본문

Algorithm/Prob

Py) SWEA 1859 백만장자 프로젝트

헬린인형 2022. 11. 2. 02:25

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

1차 시도: (제한 시간 30분) 못풀었음

2차 시도: 6분

 

0. 입출력

 

1. 김예고리즘

1-1. 알고리즘

if문, 반복문 쓰는 방법을 생각했다.
1) 현재 수가 앞날보다 크고 뒷날보다 크다면 판매, 뒷날보다 작다면 판매 금지
2) 앞날보다 작고 뒷날 큰게 없다면 return 0
3) 수가 모두 동일한데 뒷날 더 큰게 있다면 구입, 뒷날 더 작은거 직전에 팔기

뭐 이런식으로.

수익은 "제일 비싼 날*총 구매량 - 수익은 이제까지 지난 날들 합" 이라고 설정해뒀다.

1-2. 코드

풀다 말았다.

 

2. Solution

2-1. 사용 자료구조 및 알고리즘: x

2-2. 로직

1) 맨 뒷 수를 값이 가장 비싼 날(max)로 일단 설정한다.
2) 뒤에서 부터 앞으로 가격을 비교하는데,
2-1) max보다 크다면 max값을 변경한다
2-2) max보다 작거나 같다면 수익 += max - 현재가격 이다.

2-3. 코드

case = int(input())

for tc in range(case):
    N = int(input())    # 날 수
    arr = list(map(int, input().split()))

    max = arr[-1]   # 제일 끝값이 max값이라 설정
    profit = 0
    for now in range(N-2, -1, -1):
        if arr[now] >= max:
            max = arr[now]    # 최대값 변경
        else:
            profit += max - arr[now]
    print('#{} {}'.format(tc+1, profit))

 

3. 피드백

1) 그동안 프로그래머스를 많이 사용해서 저런 식의 input 값을 파이썬으로 저렇게 받아본 적이 딱히 없었음.

arr = list(map(int, input().split()))

list를 적어주지 않아서 좀 해맴

2) range 빼먹음
-> 당연히 int는 iteratable하지 않다고 잔소리..

for tc in range(case):

3) 출력 저렇게 하는 건지 몰랐다. 외우자

 

4. 오늘의 외울거리

* 입력

case = int(input())

for tc in range(case):
    N = int(input())    # 날 수
    arr = list(map(int, input().split()))


* 출력

print('#{} {}'.format(tc+1, profit))
반응형
Comments