※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 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 |