프로그래머스 - 위클리 첼린지 6주차 복서 정렬하기

프로그래머스 - 위클리 첼린지 6주차 복서 정렬하기

https://programmers.co.kr/learn/courses/30/lessons/85002?language=java

9월 첫째주 위클리 첼린지 6주차 문제 복서 정렬하기 JAVA version 을 소개한다.

##문제설명

복서 자신의 몸무게 값이 저장되어 있는 weighs 배열과

복서의 상대전적을 나타내는 head2head 배열을 매개변수로 주어젔을 때,

1. 전체승률이 가장 좋은 복서를 앞쪽에 print

2. 전체승률이 같다면, 자신보다 무게가 더 나가는 선수를 이긴 횟수가 더 많은 선수를 앞쪽에 print

3. 자신보다 무게가 더 나가는 선수를 이긴 횟수도 같다면, 더 몸무게가 무거운 선수를 앞쪽에 print

4. 몸무게도 같다면, 복서의 번호들 중 작은 번호가 앞쪽에 print

## 제한사항

weights[i] 는 i+1번째 복서의 몸무게를 의미

head2head 는 'N', 'W', 'L' 로 이루어져 있는 문자열이고,

head2head[i]는 i+1번째 복서의 복서전적, head2head[0]에 "NWL"가 저장되어 있다면

N은 1번째 복서가 1번 복서와의 상대전적이므로 자기 자신이기 때문에 N(None)이 저장

W는 1번째 복서가 2번째 복서와 싸워 이겼기 때문에 W(Win)이 저장

L은 1번째 복서가 3번째 복서와 싸워서 졌기 때문에 L(Lose)가 저장

## 입출력 예시

문제설명과 제한사항을 통해 이해 안된 부분이 있다면 입출력 예시 1-3은 이해에 도움이된다

##초기코드

문제설명에 나와있던 매개변수 weights와 head2head가 입력값으로 들어오면

제한조건에 맞게 복서의 순서를 answer 배열에 저장하여 return 해주는 solution 메소드를 작성하면 된다.

##알고리즘

알고리즘은 문제설명 그대로 진행하면 될 것 같다.

1. 전체승률이 가장 좋은 복서를 앞쪽에 print

2. 전체승률이 같다면, 자신보다 무게가 더 나가는 선수를 이긴 횟수가 더 많은 선수를 앞쪽에 print

3. 자신보다 무게가 더 나가는 선수를 이긴 횟수도 같다면, 더 몸무게가 무거운 선수를 앞쪽에 print

4. 몸무게도 같다면, 복서의 번호들 중 작은 번호가 앞쪽에 print

##질문하기에 적혀있는 문제들을 봤을 때 주의사항

1. 승률구하기 - 자료형을 double 또는 float으로 하여 처리해주기2. 승률구하기 - N은 전적에 포함시키면 안되는데 간혹 실수하는 분들이 있는 것 같다.

##승률 구하기

head2head 행렬을 이용하여 perWin 배열에 승률계산하는 모습이고

상대전적이 없는 경우 cnt=0가 0이 되기 때문에 numeric 오류가 발생, 승률을 0으로 처리해줬다.

문제 설명 조건에 맞추어

승률이 높은 순서 -> 무게가 자신보다 많은 상대를 이긴횟수 -> 몸무게가 높은 순서 -> 번호가 앞인 순서로

처리해주는 모습

## 결과

출처 : https://programmers.co.kr/

from http://centralmuseum.tistory.com/26 by ccl(A) rewrite - 2021-09-07 17:27:00