본문 바로가기

백준

[JAVA] 백준 7568번: 덩치

 


문제

  • 키와 몸무게가 모두 다른 사람보다 큰 경우 "덩치가 크다" 라고 하며 등수가 다르게 매겨짐.
  • N명의 몸무게와 키가 주어질 때, "덩치가 큰" 순서대로 덩치 등수를 메겨 출력하는 문제.

 

아이디어

  • 중요한 사실은 덩치 등수는 나보다 덩치가 큰 사람이 몇 명 있는가를 표시하는 것으로 실제 등수를 매기는 방식과는 차이가 있다.
  • 각 사람의 덩치를 다른 모든 요소들과 비교해 보다 덩치가 큰 사람이 몇 명인지 체크하여 해답을 구한다.
  • 순위를 저장하는 1차원 배열을 1로 초기화하고, 2중 for 문을 통해 덩치가 큰 사람을 발견할 때마다 +1을 해 최종 순위를 구한다.

 

풀이

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

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

        int N = Integer.parseInt(br.readLine());
        
        // (몸무게, 키) 를 저장할 배열 선언
        // 1차원 배열만 이용해 각각 0번, 1번 인덱스에 몸무게, 키 한 쌍의 식으로 저장
        int[] info = new int[N*2];
        
        // 순위를 계산할 1차원 배열 선언
        int[] rank = new int[N];

        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            // (0,1), (2,3), ... , (i*2,i*2+1) 인덱스에 각각 저장
            info[i*2] = Integer.parseInt(st.nextToken());
            info[i*2+1] = Integer.parseInt(st.nextToken());
        }
        
        // 각 요소의 순위 판단
        for(int i=0; i<N; i++) {
            // 초기 순위는 모두 1등
            rank[i] = 1;
            
            // 모든 요소를 순회하며 덩치가 큰 사람 체크
            for(int j=0; j<N; j++) {
                // 나 자신은 비교할 필요가 없음
                if(i == j) {
                    continue;
                }
                
                // 나보다 덩치가 더 크면 순위+1
                if(info[i*2] < info[j*2] && info[i*2+1] < info[j*2+1]) {
                    rank[i]++;
                }
            }
            sb.append(rank[i]).append(' ');
        }
        System.out.println(sb);
    }
}

 

 

채점 결과

7568번 채점 결과

기타

  •   문제를 꼼꼼히 읽어야겠다는 생각을 두 번째로 했다.

 

문제 링크