본문 바로가기

알고리즘/브루트포스

[자바]백준 7568번 덩치[브루트포스][엄탱]

728x90

문제 링크

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

 

7568번: 덩치

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

www.acmicpc.net

문제 설명

몸무게와 키가 주어지는 N명 집단에서 각 사람마다 등치의 등수를 출력하면 된다.

단, 몸무게와 키 둘 다 커야지만 등치가 큰 것이며 등수가 높은 것이다(1에 가까울수록 높다)

해설

해당 문제는 알고리즘 분류가 브루트포스이며, 최대 50명 이기 때문에 이중 for문을 사용해도 최대 경우의 수가 2500번 이기 때문에 완전탐색을 사용해도 좋을 것 같다.

 

완전탐색을 한명 한 명 진행하면 되고 이중 for문을 사용해서 등수를 알고 싶은 사람을 다른 사람과 비교해서 등치가 작으면 등수를 +1 씩 해주고 아니라면 그냥 지나가면 된다.

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[][] arr = new int[N][2];

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }
        
        // 등수를 알고 싶은 사람 한명 뽑기
        for (int i = 0; i < N; i++) {
            int rank = 1;
            
            // 다른 사람들과 비교하기
            for (int j = 0; j < N; j++) {
                
                // i와 j가 같으면 같은 사람이기 때문에 넘어가기
                if (i == j) {
                    continue;
                }
                
                // 등수를 알고 싶은 사람이 비교하는 사람보다 
                // 키, 몸무게 둘 다 작으면 rank를 +1 해주기
                if (arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1]) {
                    rank++;
                }
            }
            
            System.out.print(rank + " ");
        }

        br.close();
    }
}

 

 

728x90