본문 바로가기
Algorithm/백준

[Algorithm][C언어] 백준 7568번: 덩치

by 8희 2022. 3. 25.

 

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

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net


문제 요약

사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매기자.

어떤 사람의 몸무게 x kg, 키 y cm -> 이 사람의 덩치는 (x, y)
두 사람 A, B의 덩치가 각각 (x, y), (p,q)라고 할 때
x > p 그리고 y > q 이라면 A의 덩치가 B의 덩치보다 '더 크다'

만약 키는 A가 더 큰데 몸무게는 B가 더 크다면 덩치만으로는 비교 불가능

N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 '큰 덩치'의 사람의 수로 정해진다.
자신보다 더 큰 덩치의 사람이 K명이라면 그 사람의 덩치 등수는 K + 1
즉, 같은 덩치 등수를 가진 사람은 여러 명도 가능

입력

첫 줄에는 전체 사람의 수 N

그리고 이어지는 N개의 줄에는

각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 나타난다.

제한

  • 2 ≤ N ≤ 50
  • 10 ≤ x, y ≤ 20

코드

#include <stdio.h>

int main() {
	int N; //전체 사람의 수
	int x[50];
    	int y[50]; //각 사람의 몸무게와 키, 2 <= N <= 50이므로 x[50], y[50]
	int grade = 0; //덩치 등수

	scanf("%d", &N); //전체 사람의 수 입력 받기	
    
	for (int i = 0; i < N; i++) { //전체 사람의 수만큼 반복
		scanf("%d %d", &x[i], &y[i]); //각 사람의 몸무게와 키 입력 받기
	}

	for (int i = 0; i < N; i++) { //전체 사람의 수만큼 반복
		grade = 1; //덩치 등수 1부터 시작
		for (int j = 0; j < N; j++) { //전체 사람의 수만큼 반복
			if (x[i] < x[j] && y[i] < y[j]) { //덩치 비교 과정
				grade++; //덩치 등수 증가
			}
		}
		printf("%d ", grade); //덩치 등수 출력 //각 덩치 등수는 공백문자로 분리
	}
}

처음엔 x와 y를 그냥 int x, y;로 받으려 했다.

그러다 덩치 비교 과정 부분 코드를 작성하며 x와 y를 배열로 받아야 훨씬 쉬어진다는 것을 깨닫고

뒤늦게 코드를 수정했다.

실행 화면

결과