본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 7568번: 덩치 C언어

문제 출처: https://www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x,y), (p,q)라고 할 때 x>p 그리고 y>q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56,177), (45,165) 라고 한다면 A의 덩치가 B보다 큰

www.acmicpc.net

1. 코드

#include <stdio.h>

int main(void)
{
    int N, i, j, cnt;
    int arr[50][2];
    
    scanf("%d", &N);
    
    for(i = 0; i < N; i++)
        scanf("%d %d", &arr[i][0], &arr[i][1]);
    
    for(i = 0; i < N; i++)
    {
        cnt = 0;
        
        for(j = 0; j < N; j++)
            if(arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1])
                cnt++;
        
        printf("%d ", ++cnt);
    }
    return 0;
}

(실행)

2. 문제 해결 방식

우선 N과 배열을 선언하였는데 같이 묶어서 푸는 것이 더 좋을 것 같아서 배열을 사용하였다. 그런데 배열의 크기를 보면 [50][2]로 되어있는데 50으로 설정한 이유는 N의 최댓값이 50이고 키와 몸무게 이렇게 2개를 입력하기 때문에 [50][2]의 크기로 선언하였다.

int N, i, j, cnt;
int arr[50][2];

그리고 N을 입력해주고 반복문을 이용하여 키와 몸무게를 입력받게 하였다.

scanf("%d", &N);
    
for(i = 0; i < N; i++)
    scanf("%d %d", &arr[i][0], &arr[i][1]);

입력 예시로 아래와 같다고 가정해보자

몸무게
55 185
58 183
88 186
60 175
46 155

그렇다면 몸무게: 55, 키: 185가 이 예시에서 몇 등을 하는지 과정을 한번 보자

몸무게 비교 몸무게
55 185 = 58 183
55 185 < 88 186
55 185 = 60 175
55 185 > 46 155

(=으로 표시한 이유는 몸무게는 큰데 키가 작을 경우와 그 반대의 경우를 =으로 표시함)

이렇게 해서 몸무게: 55, 키: 185은 총 2등이다. 나머지도 이렇게 풀어가면 된다.

그래서 이것을 코드를 만들어야 하니 2중 반복문을 사용하여 표현하였고, cnt 변수를 이용하여 확실하게 큰 것을 비교하는 값이 클 때 증가하도록 만들었다.

for(i = 0; i < N; i++)
{
    cnt = 0;
        
    for(j = 0; j < N; j++)
        if(arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1])
            cnt++;
        
    printf("%d ", ++cnt);
}