Koala - 7기/코딩테스트 준비 스터디

[백준 / c++ ] 7795 먹을 것인가 먹힐 것인가

알 수 없는 사용자 2022. 7. 24. 23:11

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

 

7795번: 먹을 것인가 먹힐 것인가

심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을

www.acmicpc.net

 

문제 분석

크기가 n인 집합을 v1 그리고 크기가 m인 집합을 v2라고 하였을 때, v1의 원소 중 v2보다 작은 것이 몇개인지 카운트 하는 문제이다.

다양한 풀이 방법이 있지만, 완전 탐색으로 풀었다. 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int t;
int main()
{
    cin >> t; //테스트 수
 
    for(int x=0; x<t; x++)
    {
        int n,m;
        cin >> n >> m;
 
        vector<int>v1(n); //n개의 크기
        vector<int>v2(m); //m개의 크기
 
        //입력
        for(int x=0; x<n; x++cin >> v1[x];
        for(int x=0; x<m; x++cin >> v2[x];
        
        int cnt=0//쌍의 개수 세기
 
        //정렬
        sort(v1.begin(),v1.end());
        sort(v2.begin(),v2.end());
 
        for(int y=0; y<n; y++)
        {
            for(int x=0; x<m; x++)
            {
                if(v1[y] > v2[x]) cnt++;
                else break;
            }
        }
        cout << cnt <<"\n";
    }
 
    return 0;
}
cs

 

문제 풀이

몇번 테스트 할지 알기 위해, t 입력 받고 for문으로 t번 반복한다.

배열의 크기를 정할 n,m을 입력 받고, 벡터 형태의 v1, v2를 각각의 크기 만큼 정의 해준 뒤, 입력 받는다. 

각 배열들의 오름차순으로 sort() 해준다. 

쌍의 개수를 셀 cnt를 0으로 초기화 해주고 정의해 준다. 

2중 for문을 통해 v1의 원소가 v2에 존재하는지 확인하고 있다면 cnt++ 없다면 break로 꺼준다.

2중 for문을 다 돌고 난 뒤, cnt 함수를 출력한다.