본문 바로가기

코딩테스트 연습/SWEA

[SWEA] 1859. 백만 장자 프로젝트 (c++)

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

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

swexpertacademy.com

 

✏️ 싸피 준비 겸 SWEA 2, 3단계 풀기 시작!

 

 

1859. 백만 장자 프로젝트 

매매가를 미리 알고 있다는 전제하에, 최댓값을 구해야 하는 문제.

✨ 거꾸로 계산하는 방식으로 풀었다. 

 

 

1. 배열의 맨 끝 (오른쪽) 수를 MAX로 지정
2. 왼쪽 수가 더 클 경우 Max값을 갱신, 크지 않다면 result를 (Max - inp[i]) 최댓값 - 현재inp값으로 갱신

 

 

**주의할 것

- 입력값을 받은 배열 inp를 main문 안에다 선언하면 Runtime Error

- result값을 long long으로 선언해야 함 ( int는 값 범위 벗어나서 오답처리 됨)


#include <iostream>
using namespace std;
#define MAX 1000002

int inp[MAX]={0};
int main(int argc, char** argv)
{
    int T;
    cin >> T;
    for(int t=0;t<T;t++){
        int num;
        cin >> num;
        
        for(int i=0;i<num;i++) cin >> inp[i];
  
        int result = 0;
        int Max = inp[num-1]; // 맨 오른쪽 수 임시 Max지정
        
        for(int i=num-1;i>=0;i--){
            
            if(Max < inp[i]) Max = inp[i];
             else result += Max - inp[i];
            
        }
        cout << "#" << t+1 << " " << result << "\n" ;
    }
    return 0;
}