https://www.acmicpc.net/problem/1940
문제
재료의 수 N(1<=N<=15,000), 갑옷을 만드는데 필요한 수 M(1<=M<=10,000,000), N개의 재료들이 가진 고유한 번호들(1<=X<=100,000)이 공백을 사이에 두고 주어질 때, 두 재료의 고유한 번호를 더해서 M을 만들 수 있는 개수를 출력한다.
풀이
고유한 수를 정렬한 후, 이중 반복문으로 두 수를 더해서 m이 되는 경우의 수를 센다. 이때, 안쪽 루프가 i+1부터 시작하므로, n*2보다는 적은 연산을 한다.
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, arr[15010], cnt = 0;
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> arr[i];
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] + arr[j] == m) cnt++;
}
}
cout << cnt;
}
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 1238번: 파티 (0) | 2024.08.23 |
---|---|
[백준/C++] 17413번: 단어 뒤집기 2 (0) | 2024.08.21 |
[BOJ/Rust] 1854번 : K번째 최단경로 찾기 (0) | 2024.08.18 |
[백준/python] 5972: 택배배송 (0) | 2024.08.18 |
[BOJ/C++] 1916번 : 최소비용 구하기 (0) | 2024.08.18 |