본문 바로가기
알고리즘/SWEA

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

by hyerann 2019. 4. 27.

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

 

SW Expert Academy

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

www.swexpertacademy.com

재귀 함수를 이용해 heights 배열을 루프 돌면서 최대 값과 최소 값을 고르고 덤프를 수행한다.

주어진 횟수만큼 수행했다면 heights 배열의 최대 값과 최소 값의 차를 리턴한다.

#include <iostream>
#include <ios>
#include <algorithm>
using namespace std;

int dumpCnt, heights[100];
int minVal, maxVal, minIdx, maxIdx, cnt;
int getResult(int cnt);

int main() {
	cin.tie(0); ios::sync_with_stdio(0);
	for (int tc = 1; tc <= 10; tc++) {
		cnt = 1;
		cin >> dumpCnt;
		for (int i = 0; i < 100; i++) cin >> heights[i];
		cout << '#' << tc << ' ' << getResult(cnt) << "\n";
	}
	return 0;
}

int getResult(int cnt) {
	minVal = 2e9, maxVal = -2e9;
	for (int i = 0; i < 100; i++) {
		minVal = min(minVal, heights[i]);
		if (minVal == heights[i]) minIdx = i;
		maxVal = max(maxVal, heights[i]);
		if (maxVal == heights[i]) maxIdx = i;
	}
	heights[maxIdx]--; heights[minIdx]++;
	if (cnt == dumpCnt) {
		minVal = 2e9, maxVal = -2e9;
		for (int i = 0; i < 100; i++) {
			minVal = min(minVal, heights[i]);
			maxVal = max(maxVal, heights[i]);
		}
		return maxVal - minVal;
	}
	getResult(cnt + 1);
}

댓글