

https://www.acmicpc.net/problem/28353
[ 문제 요약 ]
버틸 수 있는 무게의 최대값이 K일 때 고양이를 정확히 2마리 데리고 있으면 행복해진다. N마리의 고양이의 무게 주어질 때 행복해질 수 있는 사람의 수의 최대값을 출력한다.
[ 문제 풀이 ]
1. 우선 고양이의 무게 순으로 정렬을 한다.
2. 고양이 무게의 최대값과 최솟값을 더했을 때 K보다 아래라면 사람의 수를 1 늘리고 두 번째로 가벼운 고양이와 무거운 고양이의 합을 비교한다.
3. 만약 K보다 크다면 그 다음으로 무거운 고양이와 더했을 때 K보다 아래인지 비교한다.
4. 이렇게 비교를 하다가 무거운 고양이가 가벼운 고양이보다 가벼울 경우 종료한다.
[ 소스 코드 ]
#include <bits/stdc++.h>
using namespace std;
int N, K, cnt = 0;
int arr[5050];
int main() {
cin >> N >> K;
for (int i=0; i<N; i++) cin >> arr[i];
sort(arr, arr+N);
int right = N-1, left = 0;
while (right > left){
if (arr[right] + arr[left] <= K){
right--; left++;
cnt++;
}
else right--;
}
cout << cnt;
return 0;
}
[ 주의할 점 ]
두 포인터 기법을 사용하면 된다.
'백준' 카테고리의 다른 글
| [ 백준 28340 ] K-ary Huffman Encoding (0) | 2024.11.13 |
|---|---|
| [ 백준 5557 ] 1학년 (c/c++) (0) | 2024.11.11 |
| [ 백준 28703 ] Double It (c/c++) (0) | 2024.11.09 |
| [ 백준 2872 ] 우리집엔 도서관이 있어 (c/c++) (0) | 2024.11.08 |
| [ 백준 1689 ] 겹치는 선분 (c/c++) (0) | 2024.11.07 |