본문 바로가기
백준

[백준] 7568번 : 덩치 – JAVA [자바]

by Hongwoo 2022. 7. 22.
반응형

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

 

7568번: 덩치

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 7568번 덩치는 실버 5 난이도의 구현 및 브루트 포스 문제이다. 이 문제에서는 N명의 키와 몸무게가 주어진다. 그리고 한 사람의 키와 몸무게가 다른 사람보다 더 크면 그 사람은 덩치가 더 크다고 한다. 이때, N명의 키와 몸무게가 주어질 때 덩치 등수를 출력하면 된다.

 

이 문제는 정렬을 안 쓰고서도 풀 수 있다. 브루트 포스, 즉 가능한 모든 경우를 봐야 한다. 우선 배열 2개를 만든다. 배열 하나는 h라고 부르고, 이 배열에는 키를 저장할 것이다. 그리고 다른 배열은 w라고 부르고, 이 배열에는 몸무게를 저장할 것이다. 그리고 또 다른 배열 order를 만든다. 이 배열에는 각 사람의 덩치 등수를 저장할 것이다. 처음에는 모든 사람의 덩치 등수를 1로 초기화시켜준다.

 

이 문제에서는 모든 사람의 키와 몸무게를 서로서로 비교해야 되기 때문에 이중 for-loop을 풀 것이다. inner for-loop과 바깥 for-loop 둘 다 0부터 n까지 돌려준다. 그리고 h [i] < h [j]이고 w [i] < w [j] 이면 i번째 사람의 덩치가 j번째 사람의 덩치보다 더 작다는 것이니까 덩치 등수를 +1 시켜준다. 

 

이렇게 이중 for-loop을 돌리고 보면 모든 경우를 확인한 것이므로 order 배열을 출력만 해주면 된다.

 

자세한 코드는 밑에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] h = new int[n];  //키 배열
        int[] w = new int[n];  //몸무게 배열
        int[] order = new int[n];  //등수 배열
        for (int i = 0; i < n; i++) {
            int num = n;
            StringTokenizer st = new StringTokenizer(br.readLine());
            w[i] = Integer.parseInt(st.nextToken());
            h[i] = Integer.parseInt(st.nextToken());
            order[i] = 1;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                //키와 몸무게 둘다 더 작으면 등수가 1씩 밀린다
                if (w[i] < w[j] && h[i] < h[j]) order[i]++;
            }
        }
        //등수 출력
        for (int i = 0; i < n; i++) {
            System.out.print(order[i] + " ");
        }
    }
}

 

 

반응형

댓글