우당탕탕 개발일지
[SWEA] 1859. 백만 장자 프로젝트(Java, D2) 본문
문제
다음과 같은 조건 하에서 사재기를 하여 최대한의 이득 구하기
1. 원재는 연속된 N일 동안의 물건의 매매가를 예측하여 알고 있다.
2. 당국의 감시망에 걸리지 않기 위해 하루에 최대 1만큼 구입할 수 있다.
3. 판매는 얼마든지 할 수 있다.
예를 들어 3일 동안의 매매가가 1, 2, 3 이라면 처음 두 날에 원료를 구매하여 마지막 날에 팔면 3의 이익을 얻을 수 있다.
입출력 예
풀이
해당 문제는 주어진 판매가 배열의 마지막 원소에서부터 풀면 된다.
구매한 가격보다 판매가가 최고로 큰 경우에만 팔아야 하기 때문이다.
따라서 아래와 같은 방식으로 움직인다.
1. 마지막 원소를 가장 큰 수라고 가정한다.
2. 마지막 원소와 하나 앞의 원소의 크기를 비교 한다.
2-1. 마지막 원소가 클 경우 >> 하나 앞의 원소를 구매한다. (이득 += 가장 큰 수 - 구매할 원소의 크기)
2-2. 마지막 원소가 작은 경우 >> 가장 큰수 값을 하나 앞의 원소로 지정한다.
3. 2번의 과정을 주어진 배열이 끝날때까지 반복한다.
1 1 3 1 2 이라고 주어졌다고 가정해보자
마지막부터라고 생각하면 2 1 3 1 1이 된다.
1. 2를 max 값으로 설정
2. 1이 max 2보다 더 작기에 1 구매 (2-1)
>> sum += 2-1
>> sum = 1
3. 3이 max 2보다 크기에 max = 3 (2-2)
4. 1이 max 3보다 작기에 1 구매 (2-1)
>> sum += 3-1
>> sum = 1+2 = 3
5. 1이 max 3보다 작기에 1 구매 (2-1)
>> sum += 3-1
>> sum = 3+2 = 5
따라서 최대 이익은 5가 된다.
이렇게 뒤에서부터 살펴보게되면 남은 날 중 가장 큰 값을 쉽게 찾을 수 있게 된다.
코드
첫번째 for문 : 배열을 거꾸로 저장
두번째 for문 : 2번 로직
println : 최대 이익 출력
SWEA 문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
'코테 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 14178. 1차원 정원(Java, D3) (0) | 2024.05.13 |
---|---|
[SWEA] 1983. 조교의 성적 매기기(Java, D2) (0) | 2024.04.29 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까(Java, D2) (0) | 2024.04.29 |
[SWEA] 1989. 초심자의 회문 검사(Java, D2) (0) | 2024.04.29 |
[SWEA] 1926. 간단한 369게임(Java, D2) (0) | 2024.04.25 |