프로그래머스 복서 정렬하기 JAVA

https://programmers.co.kr/learn/courses/30/lessons/85002

 

코딩테스트 연습 - 6주차_복서 정렬하기

복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요

programmers.co.kr

 

[문제]

  1. 전체 승률이 높은 복서의 번호가 앞쪽으로 갑니다. 아직 다른 복서랑 붙어본 적이 없는 복서의 승률은 0%로 취급합니다.
  2. 승률이 동일한 복서의 번호들 중에서는 자신보다 몸무게가 무거운 복서를 이긴 횟수가 많은 복서의 번호가 앞쪽으로 갑니다.
  3. 자신보다 무거운 복서를 이긴 횟수까지 동일한 복서의 번호들 중에서는 자기 몸무게가 무거운 복서의 번호가 앞쪽으로 갑니다.
  4. 자기 몸무게까지 동일한 복서의 번호들 중에서는 작은 번호가 앞쪽으로 갑니다.

주어진 조건에 따라 정렬을 하는 문제

 

[문제 풀이]

정렬을 하기위해 다양한 방법들이 있을 수 있지만 간단하게 Class에 Comparable을 Override 해서 비교함수를 구현함.

1. 승률에 따른 내림차순 > 2. 승률 동일 시 무거운 복서를 이긴 횟수 내림차순 > 3. 자기 몸무게 내림차순 > 4. 복서의 번호에 오름차순 으로 정렬 조건을 구현하여, List를 정렬할 수 있도록 한다.

 

승률이나 무거운 복서를 이긴 횟수 등을 구하는 법은 다양하게 있을 것 같다. (다른 사람의 풀이를 많이 보는 게 좋을 듯)

승률은 입력 시 head2head[i] 에서 일일히 W,L,N 을 charAt을 통해서 구분해서 횟수를 세어 승률과 자신보다 무거운 복서를 이긴 횟수를 구하도록 하였으며 Boxer List에 저장한 뒤 Collections.sort 를 통해 정렬 후 answer 배열에 출력하였다.

 

[문제 코드]