N

(SWEA c++)1208. [S/W 문제해결 기본] 1일차 - Flatten 본문

SW Expert Academy

(SWEA c++)1208. [S/W 문제해결 기본] 1일차 - Flatten

naeunchan 2020. 10. 7. 09:42
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh&categoryId=AV139KOaABgCFAYh&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com

 

test case는 10으로 정해져 있으므로 for문을 10번 반복한다.

vector를 이용하여 문제를 해결.

가로의 길이는 100으로 고정이므로 100개의 상자 높이를 받아온다.

 

평탄화 작업을 수행.

상자의 높이가 담겨져 있는 v 벡터를 계속해서 sort를 한다.

오름차순 정렬이 되기 때문에 v[0]은 min 값, v[99]는 max 값이 담겨져 있다.

만약 두 값의 차이가 1 이하이면 평탄화 작업이 완료된 것이므로 빠져나오도록 한다.

아니라면 v[0]++, v[99]--를 해주어 덤프 작업을 수행.

 

마지막에는 sort를 한번 더 해주고, v.back() - v.front()를 출력하여 답을 출력하면 된다.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(void)
{
    for(int i = 1; i <= 10; i++)
    {
        int t;
        vector<int> v;
        cin >> t;
        
        for(int j = 0; j < 100; j++)
        {
            int tmp;
            cin >> tmp;
            v.push_back(tmp);
        }
        
        for(int j = 0; j < t; j++)
        {
            sort(v.begin(), v.end());
            if(v.back() - v.front() <= 1)
                break;
            v[0]++;
            v[99]--;
        }
        sort(v.begin(), v.end());
        cout << "#" << i << " " << v.back() - v.front() << endl;
    }
    return 0;
}       
728x90
반응형