반응형
두개의 조합에 의해서 M인 값을 얼마나 많이 찾을 수 있는 가에 대한 문제입니다.
예를 들어서,
2 7 4 1 5 3
이라는 재료가 주어지고, 조합해서 만들어야 하는 갑옷이 9의 값을 가져야 한다면,
먼저 정렬을 수행합니다.
1 2 3 4 5 7
그러면 두개의 합을 왼쪽편과 오른쪽편을 이용해서 구해보도록 합니다.
1) 1 과 7을 더하면 8이므로 숫자가 부족하므로 왼쪽을 1 증가시킵니다.
2) 2 와 7을 더하면 9이므로 답을 1 증가시키고, 왼쪽을 1 증가, 오른쪽을 1 감소합니다.
3) 3과 5를 더하면 8이므로, 왼쪽을 1 증가합니다.
4) 4와 5를 더하면 9이므로, 왼쪽은 1 증가, 오른쪽을 1 감소합니다.
5) 왼쪽의 포인터와 오른쪽 포인터가 교차했으므로 종료합니다.
그러면 총 2개의 갑옷을 만들 수 있다는 것을 알 수 있습니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #1940
// - by Aubrey Choi
// - created at 2019-07-04
//------------------------------------------------
#include <stdio.h>
#include <algorithm>
int main()
{
int n, m, i, j, v[15000], ans = 0;
scanf("%d%d", &n, &m);
for(i = 0; i < n; i++) scanf("%d", &v[i]);
std::sort(v, v + n);
i = 0, j = n - 1;
while(i < j)
{
if(v[i] + v[j] == m) ans++, i++, j--;
else if(v[i]+v[j] < m) i++;
else j--;
}
printf("%d\n", ans);
return 0;
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1956 운동(플로이드 워샬) (2) | 2022.12.09 |
---|---|
[C/C++] 백준 #1946 신입 사원(탐욕 기법) (0) | 2022.11.29 |
[C/C++] 백준 #1939 중량제한(그래프) (0) | 2022.11.19 |
[C/C++] 백준 #1937 욕심쟁이 판다(동적 계획법) (0) | 2022.11.17 |
[C/C++] 백준 #1935 후위 표기식2(스택) (0) | 2022.11.16 |
댓글