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

 

이번에 볼 문제는 백준 1940번 문제인 주몽이다.

문제는 아래 링크를 확인하자.

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

 

1940번: 주몽

첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고

www.acmicpc.net

갑옷 조합의 경우의 수를 구하는 문제가 아닌 갑옷을 최대 몇 개 만들 수 있는지를 구하는 문제임에 주의하자.

 

고유번호가 M인 갑옷을 만드는 재료의 고유번호는 k와 M-k의 형태로만 이루어질 수 있다는 점을 이용하여 크기 1000만의 배열을 작성하면 문제를 간단히 해결할 수 있다.

 

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

#include <iostream>
using namespace std;

int arr[10000001];

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

	int ans = 0;
	int N, M; cin >> N >> M;
	while (N--) {
		int x; cin >> x;
		arr[x]++;
	}
	if ((M & 1) == 0) {
		int& tmp = arr[M / 2];
		ans += tmp / 2;
		int MM = M / 2;
		for (int i = 1; i < MM; i++) {
			ans += min(arr[i], arr[M - i]);
		}
	}
	else {
		int MM = M / 2;
		for (int i = 1; i <= MM; i++) {
			ans += min(arr[i], arr[M - i]);
		}
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 18310 // C++] 안테나  (0) 2022.02.04
[BOJ 1246 // C++] 온라인 판매  (0) 2022.02.03
[BOJ 2012 // C++] 등수 매기기  (0) 2022.02.01
[BOJ 14852 // C++] 타일 채우기 3  (0) 2022.01.31
[BOJ 23823 // C++] 초코칩 케이크  (0) 2022.01.30

+ Recent posts