티스토리 뷰

Algorithm/Baekjoon

[백준] 7568번 덩치(JAVA)

다교이 2022. 7. 22. 21:38
728x90

문제

- 사람의 덩치를 (몸무게, 키)로 표시

- A : (x, y), B : (p, q)라고 할 때, x > p 그리고 y > q이라면 A의 덩치가 B의 덩치보다 더 크다고 말함

- 하지만 몸무게는 A가 더 많이 나가지만, B가 키가 더 크다면 누구도 상대방보다 더 크다고 말할 수 없음

- N명의 집단에서 각 사람의 덩치 등수는 자신보다 더 큰 덩치의 사람의 수로 정해짐

- 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k + 1

 

해결방법

각 사람과 다른 사람의 덩치를 비교해보면서 더 큰 사람의 덩치 등수를 1씩 더해준다. 각 사람의 신체 정보를 담는 배열과 덩치 등수를 담는 배열을 만들어 해당 사람들의 덩치를 비교하면서 덩치 등수를 변경해준다.

 

코드

import java.io.*;
import java.util.*;

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[][] people = new int[N][N];		// 신체 정보를 저장할 배열
        int[] grades = new int[N];		// 덩치 등수를 저장할 배열

        for(int i = 0; i<N; i++){
            grades[i] = 1;			// 맨 처음 모든 사람의 덩치 등수를 1로 초기화
        }

        for(int i = 0; i<N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            people[i][0] = Integer.parseInt(st.nextToken());
            people[i][1] = Integer.parseInt(st.nextToken());
        }

        for(int i = 0; i<N-1; i++){
            for(int j = i+1; j<N; j++){
                // i번째 사람보다 j번째 사람의 덩치가 더 크다면, i번째 사람의 덩치 등수가 밀리게 되므로 i번째 덩치 등수를 증가시킴 
                if(people[i][0] < people[j][0] && people[i][1] < people[j][1]) grades[i]++;
                // j번째 사람보다 i번째 사람의 덩치가 더 크다면, j번째 사람의 덩치 등수가 밀리게 되므로 j번째 덩치 등수를 증가시킴
                else if(people[i][0] > people[j][0] && people[i][1] > people[j][1]) grades[j]++;
            }
        }

	// 덩치 등수 출력
        for(int grade : grades){
            System.out.print(grade+" ");
        }

        br.close();
    }
}
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday