※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 15728번 문제인 에리 - 카드이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/15728 

 

15728번: 에리 - 카드

첫째 줄에 N, K(0 ≤ K < N ≤ 100)가 주어지고 둘째 줄에는 N개의 ‘공유 숫자카드’에 적혀 있는 정수, 셋째 줄에는 N개의 ‘팀 숫자카드’에 적혀 있는 정수가 주어진다. 이 수는 -10,000보다 크거나

www.acmicpc.net

K개의 팀 카드를 버리는 과정과 현재의 팀 카드로 최대의 점수를 내는 과정을 직접 시뮬레이션해보자.

 

가능한 카드의 조합은 최대 100개의 공유카드와 팀 카드의 쌍의 개수와 같으므로 10,000가지밖에 되지 않는다.

 

가능한 카드의 조합 중 가장 점수가 큰 경우와 그 때의 우리 팀 카드의 번호가 무엇인지를 기억하고, 모든 경우의 수를 살핀 다음 현재 최대점을 만들 때 사용한 우리 팀 카드를 배제하는 시뮬레이션을 돌리면 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

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

int arr1[100];
int arr2[100];
bool visited[100];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, K; cin >> N >> K;
	for (int i = 0; i < N; i++) cin >> arr1[i];
	for (int i = 0; i < N; i++) cin >> arr2[i];

	int ans, pos;
	for (int k = -1; k < K; k++) {
		ans = -1000000007, pos = -1;
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (visited[j]) continue;
				if (arr1[i] * arr2[j] > ans) ans = arr1[i] * arr2[j], pos = j;
			}
		}
		visited[pos] = 1;
	}

	cout << ans;
}
728x90

+ Recent posts