[BOJ 28353] 고양이 카페

2023. 7. 20. 10:38Baekjoon/제 7회 천하제일 코딩대회 본선

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

 

- 문제 요약

 

찬우는 친구들과 고양이 카페에 가려 한다.

고양이 카페에는 마리의 고양이가 있다.

번째 고양이의 무게는 이다.

찬우와 친구들은 모두 고양이를 사랑하기 때문에 무릎 위에 고양이를 정확히 마리 데리고 있으면 행복해진다.

하지만 허약한 찬우와 친구들은 데리고 있는 두 고양이의 무게의 합이 를 넘는다면 버티지 못할 것이다.

각 고양이의 무게와 한 명이 버틸 수 있는 최대 무게 가 주어질 때 최대 몇 명이 행복해질 수 있는지 구해보자.

 

 

- 알고리즘 정리

 

고양이들을 오름차순으로 정렬해주고 고양이의 무게를 2개씩 짝지어서 합이 K 이하인 쌍의 최대 갯수를 구해주면 됩니다.

다양한 전략이 존재하기 때문에 그냥 그리디하게 풀어주면 됩니다.

 

 

- 코드 작성

 

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

#define MAX 5001
int n,k,arr[MAX],r;

int main(){
    ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
    cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
	}
	sort(arr+1,arr+n+1);
	for(int i=1,j=n;i<j;i++){
		while(i<j&&arr[i]+arr[j]>k){
			j--;
		}
		if(i<j&&arr[i]+arr[j]<=k){
			r++;
			j--;
		}
	}
	cout<<r;
}

코드 제출 결과

 

728x90

'Baekjoon > 제 7회 천하제일 코딩대회 본선' 카테고리의 다른 글

[BOJ 28358] 생일 맞추기  (0) 2023.07.22
[BOJ 28359] 수열의 가치  (0) 2023.07.22
[BOJ 28356] 부정행위 멈춰!  (0) 2023.07.21
[BOJ 28361] 크리스마스  (0) 2023.07.21
[BOJ 28352] 10!  (0) 2023.07.20