본문 바로가기
알고리즘

[ 백준 1671 ] 상어의 저녁식사

by 데구르르르 2021. 3. 3.

문제

어떤 상어는 저녁식사로 서로를 먹는다. 모든 상어는 자신과 다른 상어의 크기, 속도, 지능을 수치로 나타낸 것을 알고 있다. 만약, 상어 A의 크기, 속도, 지능이 상어 B의 크기, 속도, 지능보다 크거나 같다면 상어 A는 상어 B를 먹을 수 있다. 그러나, 상어들의 왕 김재홍은 상어들이 많이 없어지는 것을 방지하기 위해서 한 상어가 최대 두 개의 상어만 먹을 수 있게 했다. 상어들은 김재홍의 말을 모두 듣는다.

능력치가 모두 같은 상어 A, B가 있다면 A가 B를, B가 A를 잡아먹을 수는 있지만 A, B가 서로 잡아먹을수는 없다.

N마리 상어의 크기, 속도, 지능이 주어졌을 때, 살아남을 수 있는 상어 수의 최솟값을 구하시오.

입력

첫째 줄에 상어의 마리 수 N이 주어진다. 이 값은 50보다 작거나 같은 자연수이다. 둘째 줄부터 각 상어의 크기, 속도, 지능의 정보가 주어진다. 이 값은 2,000,000,000보다 작거나 같은 자연수이다.


출력

첫째 줄에 살아남을 수 있는 상어 수의 최솟값을 출력한다.

예제 입력 예제 출력

4 5 5
10 10 8
5 7 10
8 7 7
8 10 3
2

 

풀이

이분매칭 알고리즘 사용
상어 클래스를 생성한 후 compareTo 를 Override 하여 객체 비교시 활용함
한 상어당 최대 두개의 상어까지 먹을 수 있으므로 dfs 두번 반복


[ JAVA ]

 

'알고리즘' 카테고리의 다른 글

[ 백준 4196 ] 도미노  (0) 2021.03.05
[ 백준 2150 ] SCC  (0) 2021.03.04
[ 백준 11376 ] 열혈강호2  (0) 2021.03.01
[ 백준 11375 ] 열혈강호  (0) 2021.03.01
[ 백준 2188 ] 축사 배정  (0) 2021.03.01

댓글