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

[SWEA] 7102. 준홍이의 카드놀이

by hyerann 2019. 5. 6.

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

 

SW Expert Academy

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

www.swexpertacademy.com

모든 경우의 수를 해당 경우의 index에 저장한 후 답을 찾았다.

최대 값에 해당하는 경우를 vector에 저장하다가, 가지고 있던 최대 값보다 큰 값을 만나면 최대 값을 갱신하고 vector를 clear()한 후 다시 답을 저장했다.

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

int N, M, cnt[41];
vector<int> result;
void getResult();
void print();

int main() {
	int T; cin >> T;

	for (int tc = 1; tc <= T; tc++) {
		fill_n(cnt, N + M, 0);
		result.clear();
		cin >> N >> M;
		cout << '#' << tc;
		getResult();
	}
	return 0;
}
void getResult() {
	// 경우의 수 구하기
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			cnt[i + j]++;
		}
	}
	// 등장할 확률이 가장 높은 숫자 찾기
	int max = -1;
	for (int i = 2; i <= 40; i++) {
		if (cnt[i] < max) continue;
		else if (cnt[i] == max) result.push_back(i);
		else if (cnt[i] > max) {
			result.clear();
			result.push_back(i);
			max = cnt[i];
		}
	}
	print();
}

void print() {
	for (int i = 0; i < result.size(); i++) {
		cout << ' ' << result[i];
	}
	cout << "\n";
}

댓글