: solved.ac class 2 - silver 5

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

 

7568번: 덩치

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

www.acmicpc.net

 

 

예제 입력 1

5
55 185
58 183
88 186
60 175
46 155

 

예제 출력 1

2 2 1 2 5

 

 

정답

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n;
	int grade = 1;
	int p[50][2] = { 0, };

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%d %d", &p[i][0], &p[i][1]);
	}

	for (int i = 0; i < n; i++) {
		grade = 1;

		for (int j = 0; j < n; j++) {
			if (p[j][0] > p[i][0] && p[j][1] > p[i][1]) grade++;
		}
		printf("%d ", grade);
	}
	return 0;
}


해설

 

 

1. 각 사람들의 키와 몸무게를 2차원 배열에 입력받는다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n;
	int grade = 1;
	int p[50][2] = { 0, };

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%d %d", &p[i][0], &p[i][1]);
	}

 

2. 입력받은 사람의 수만큼 for문을 돈다.

for문의 첫머리에 grade 변수를 1로 초기화시켜 두고, 안에서 for문을 한 번 더 돌면서 배열을 검사한다.

'키와 몸무게가 모두 자기보다 큰 사람'이 나올 때마다 grade 변수를 1씩 증가시켜 준다.

(키나 몸무게 중 한쪽은 같고 다른 한쪽만 더 커도 덩치가 더 큰 것으로 간주한다든지 하는 조건은 없으므로

위의 조건만 적용해도 충분하다.)

 

안쪽 for문 순회가 끝나면 grade 값을 출력해 준다.

for문을 돌 때마다 초기화와 출력을 반복하므로 배열 등 별도의 저장용 변수는 필요하지 않다.

	for (int i = 0; i < n; i++) {
		grade = 1;

		for (int j = 0; j < n; j++) {
			if (p[j][0] > p[i][0] && p[j][1] > p[i][1]) grade++;
		}
		printf("%d ", grade);
	}
	return 0;
}

'C언어 > BAEKJOON' 카테고리의 다른 글

[백준] 10814. 나이순 정렬  (0) 2022.05.21
[백준] 1181. 단어 정렬  (0) 2022.05.21
[백준] 10866. 덱  (0) 2022.05.14
[백준] 1059. 좋은 구간  (0) 2022.05.14
[백준] 1063. 킹  (0) 2022.05.08

+ Recent posts