Java/백준알고리즘

[Java] 백준알고리즘 #7568 덩치

Sehyeok20 2021. 3. 15. 15:45
반응형

백준알고리즘 #7568 덩치

각 사람들의 키와 몸무게를 입력받고 등수를 매기는 문제이다.

 

먼저 각 사람들의 키와 몸무게를 저장할 2차원 배열 a를 만들어 몸무게와 키를 입력받는다.

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] a = new int[n][2];
int[] b = new int[n];
for (int i = 0; i < n; i++) {
	a[i][0] = sc.nextInt();
	a[i][1] = sc.nextInt();
	b[i] = 1;
}

a[i][0] 은 몸무게, a[i][1]은 키를 입력받도록 했다.

b 배열은 등수를 저장할 배열이므로 1로 초기화 시켜주었다.

 

위 조건에는 키와 몸무게가 더 많이 나간다면 덩치가 크다고 했다.

이 덩치를 이용하여 어떤사람 A보다 덩치가 큰 사람을 구하여 덩치가 큰 사람이 적은 순서대로 덩치 등수를 매기면 된다.

for (int i = 0; i < n; i++) {
	for (int j = 0; j < n; j++) {
		if (a[i][0] < a[j][0] && a[i][1] < a[j][1]) {
			b[i]++;
		}
	}
}	

이 문제는 선택정렬 문제와는 달리 첫번째 사람부터 마지막 사람까지 한명씩 일일히 비교해 봐야 하므로 

이중 for문 모두 초기값을 0으로 주었다.

 

i 번째의 사람이 j 번째의 사람보다 키와 몸무게가 작다면 b[i] (등수)를 하나 증가시킨다.

이를 반복하면 덩치가 큰 사람이 많을수록 b[i] (등수)가 커지므로 자연히 적은사람 순으로 등수를 매길 수 있다.

 

전체 코드를 보면 다음과 같다.

import java.util.Scanner;

public class Back7568 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] a = new int[n][2];
		int[] b = new int[n];
		for (int i = 0; i < n; i++) {
			a[i][0] = sc.nextInt();
			a[i][1] = sc.nextInt();
			b[i] = 1;
		}
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (a[i][0] < a[j][0] && a[i][1] < a[j][1]) {
					b[i]++;
				}
			}
		}	
		
		for (int i = 0; i < n; i++) {
			System.out.print(b[i] + " ");
		}

	}

}

 

반응형