건전한 건전지
article thumbnail
728x90
반응형

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

 

28353번: 고양이 카페

첫째 줄에 정수 $N$과 $K$가 공백으로 구분되어 주어진다. $(1 \leq N \leq 5\,000;$ $1 \leq K \leq 10^9)$ 둘째 줄에는 각 고양이의 무게를 의미하는 $N$개의 정수 $w_1, w_2, \dotsm, w_N$이 공백으로 구분되어 주어

www.acmicpc.net

 

N마리의 고양이 중 2마리 몸무게의 합이 K 이하가 되는 최대 경우의 수

 

투포인터로 풀었다.

 

1. 배열 정렬

2. if(최솟값 + 최댓값 <= K)

-> true : cnt 1개 증가, 최솟값 포인터 +1, 최댓값 포인터 -1 (중복이 없어야함)

-> false : 최댓값 포인터 -1 . 왜냐하면 가장 가벼운 고양이 + 가장 무거운 고양이의 합이 K보다 크기 때문에 고양이의 무게를 줄여야 함!

최솟값 포인터가 최댓값 포인터보다 작을 때까지 실행하면 끝

 

 

전체 코드

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, k; cin >> n >> k;
	vector <int> vc(n, 0);
	for (int i = 0; i < n; i++) {
		cin >> vc[i];
	}
    // 오름차순 정렬
	sort(vc.begin(), vc.end());

	int start = 0, end = n - 1;
	int ans = 0;
	while (start < end) {
		int sum = vc[start] + vc[end];
        
        // 두마리의 고양이를 합친 무게가 k 이하라면 카운트 증가
		if (sum <= k) {
			ans++;
			start++; end--;
			continue;
		}
		// k보다 크다면 무게를 줄여야함! (무거운 고양이는 ㄲㅈ!)
		if (sum > k) {
			end--;
		}
	}

	cout << ans;
}

 

 

나는 예전에 너구리 카페 갔다가 난폭한 너구리한테 눈알 뽑힐뻔 ㅠㅠ

728x90
반응형
profile

건전한 건전지

@건전한 건전지

나는 언리얼의 왕이 될 남자다 👑