문제 출처: https://www.acmicpc.net/problem/7568
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);
}
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 2750번: 수 정렬하기 C언어 (0) | 2020.05.21 |
---|---|
백준 알고리즘 1001번 : A-B Java[자바] (0) | 2020.05.04 |
백준 알고리즘 1000번: A+B Java[자바] (0) | 2020.04.30 |
백준 알고리즘 10172번: 개 Java[자바] (0) | 2020.04.26 |
백준 알고리즘 2798번: 블랙잭 C언어 (0) | 2020.04.24 |