본문 바로가기
공부하자/알고리즘

[백준] 7568번 덩치 C, java

by snbrin 2022. 1. 25.

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

 

7568번: 덩치

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

www.acmicpc.net

 

C

#include <stdio.h>

struct people{	//구조체 정의
	int weight;		//구조체 멤버1 몸무게
	int height;		//구조체 멤버2 키
	int rank;		//구조체 멤버3 순위
};


int main() {

	int n = 0;	//사람 수

	struct people list[50];	//n은 최대 50이므로

	//1.사람 수 입력
	scanf("%d", &n);	

	for (int i = 0; i < n; i++) {
		//2-1.사람 수만큼 몸무게,키 입력받기
		scanf("%d %d", &list[i].weight, &list[i].height);
		//2-2.우선 임의로 순위 입력
		list[i].rank = 1;
	}
	//3.i번째 값과 다른 값들을 차례대로 비교
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			//j번째의 키와 몸무게가 모두 다 크면 i번째 입력값보다 순위가 높으므로
			//i번째의 순위는 뒤로 밀리게 됨(rank +1을 하는 이유)
			if (list[i].height < list[j].height && list[i].weight < list[j].weight)
				list[i].rank += 1;
		}
	}
	//4.차례대로 순위 출력
	for (int i = 0; i < n; i++)
		printf("%d ", list[i].rank);

	return 0;

}

브루트포스(Brute Force)는 직역하면 짐승의 힘ㅋㅋㅋ 무식하게 모든 경우의 수를 탐색하는 알고리즘이다. 반복문으로 차례대로 탐색하며 결과값을 도출하면 되는 단순한 알고리즘이지만 나는 왜...! 헤매었는가.. 반성하고 공부하자!! 구조체를 너어어어무 오랜만에 사용해봐서 아주 잠시 뇌 고장..ㅠ 구조체가 아니어도 되지만 다른 사람들 풀이를 구경하다 구조체로 풀이한 분들이 꽤 계시길래 나도 구조체로 해보았다. 

 

java

package javastd1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class bj7568 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());	//사람 수 입력
		int[][] arr = new int[N][2];	//2차원 배열로 몸무게, 키 저장
 
		String[] sp;
		
		for(int i = 0; i < N; i++) {
			sp = br.readLine().split(" ");			//몸무게와 키 문자 분리 구분자
			arr[i][0] = Integer.parseInt(sp[0]);	//2차원 배열 첫번째 몸무게 입력
			arr[i][1] = Integer.parseInt(sp[1]);	//2차원 배열 두번째 키 입력
		}
		//순서대로 비교
		for(int i = 0; i < N; i++) {
			int rank = 1;
			for(int j = 0; j < N; j++) {
				//if(i == j) continue;
				//값이 더 큰 비교값이 있을 경우 순위 뒤로 밀림
				if (arr[i][0] < arr[j][0] && arr[i][1] < arr[j][1]) {
					rank++;
				}
			}
			System.out.print(rank + " ");
		}
	}
}

자바에서는 2차원 배열로 풀이! [ ][0]에는 몸무게, [0][ ]에는 키 값. 순서대로 비교하는 for문 안에는 동일한 알고리즘으로 해결하였다.