이번 문제는 양궁대회 문제이다.
단순한 양궁 점수 계산 문제처럼 보이지만, 설명이 굉장히 길고, 그 이유는 아래에 있다.
2번 설명이 조금 애매할 수 있는데, 만약 어피치가 10점 과녁을 2발을 맞추고 뒤 이어 라이언이 10점 과녁을 3발을 맞추면, 라이언이 10점을 획득한다. 만약 같은 개수의 화살을 맞췄다면 어피치가 해당 과녁의 점수를 획득한다.
먼저 어피치가 쏜 점수 배열이 주어지고, 해당 점수를 가장 큰 차이로 이기기 위한 라이언의 점수 배열을 return 해야 한다. 만약 없으면 [-1]을 반환하면 된다.
또한 제한사항에 의해 가장 큰 점수 차이로 우승할 수 있는 방법이 여러가지인 경우, 가장 낮은 점수를 더 많이 맞힌 경우를 return 해야 한다.
입출력 예1 을 살펴보면, [3,2,0,0,0,0,0,0,0,0] 으로도 라이언이 4점 차이로 우승이 가능하다.
하지만 위와 같이 과녁을 맞추면 6점 차이로 라이언이 우승 할 수 있다.
입출력 예 2번과 같이 n이 1이고 어피치가 10점을 1개 쏜 경우라면, 라이언이 10점을 맞추더라도 동점이기 때문에 어피치가 우승하게 된다. 따라서 [-1]을 반환한다.
점수 차도 신경써야 하고, 같은 경우의 수라면 가장 낮은 점수를 많이 맞춘 경우도 신경써야 한다.
combinations()를 활용하여 라이언일 쏠 과녁을 미리 만들어 주었다.
즉 점수배열 p 에서 n개 만큼을 뽑아 조합하는 경우의 수 comb 를 만들어 주었다.
이제 comb 의 점수대로 화살을 쏘는데, 만약 어피치가 이미 획득한 점수라면, 어피치의 화살보다 1개를 더 쏘아주어야 한다. 그리고 마지막 남은 화살이 있다면, 0점에 쏴주도록 했다.
comb가 사실 제일 중요한데, 만약 comb 가 [ 10,9,8,7,6 ] 이라고 하고, (n == 5) 어피치가[3,2,0,0,0...] 이라고 가정하면
라이언은 10점부터 화살을 쏘게 되며, 이때 어피치(info[10-point])의 점수가 있고 남은 화살로 해당 점수를 획득할 수 있다. 따라서 어피치는 4개의 화살을 쏘게되고 남은 화살 1개는 9점이 아닌 8점을 향해 쏘게 된다.
그리고 입출력 예제 4번을 보게 되면, 위 공식에 의해 10점부터 3점까지 화살을 쏘게되며 화살 2발이 최종적으로 남는다. 하지만 2발의 화살로는 [3,4,3]개의 화살을 쏜 어피치보다 더 많은 화살을 과녁에 맞출 수가 없다. 따라서 이때에는 0점 과녁에 남은 화살을 맞춰준다.
이제 양 선수의 점수를 비교하여 해당 score 보다 크거나 같은 경우, 그리고 ans 에 이미 입력된 값이 아니라면 각 요소들을 갱신해 준다.
그리고 ans에는 [라이언의 점수배열],[해당 배열일때 점수차] 가 배열쌍으로 전달되며, 이를 다시 점수의 내림차순 기준으로 정렬해준다.
먼저 위쪽 if문에 의해 score 는 정해진 상태이고, 해당 score 로 중복된 rp가 있는지 확인하여, 현재 저장된 answer 과 비교하여 준다. 이때 비교는 뒤쪽에서부터 진행한다. 이유는 더 낮은 점수를 많이 쏜 배열을 반환해야 하기 때문이다.
만약 기존 answer 의 낮은 점수에 더 많은 화살이 있다면 break 로 탈출하면 된다.
반대로 ans 배열에 저장된 배열의 화살이 더 많다면 answer 을 갱신하고 break 를 통해 탈출하면 된다.
처음 문제를 읽었을 때, 과녁에 화살을 쏘는 것부터가 고민이 많았다.
이는 combinations()를 이용해 풀긴 했으나, 사실 이게 맞는 풀이인지는 모르겠다.
'프로그래머스 퀴즈(Python) > level 2' 카테고리의 다른 글
23.02.10 파이썬 코딩 퀴즈#147 할인 행사 (프로그래머스 스쿨) (0) | 2023.02.10 |
---|---|
23.02.10 파이썬 코딩 퀴즈#146 두 큐 합 같게 만들기 (프로그래머스 스쿨) (0) | 2023.02.10 |
23.02.09 파이썬 코딩 퀴즈#144 주차 요금 계산(프로그래머스 스쿨) (0) | 2023.02.09 |
23.02.09 파이썬 코딩 퀴즈#143 K진수에서 소수 개수 구하기(프로그래머스 스쿨) (0) | 2023.02.09 |
23.02.09 파이썬 코딩 퀴즈#142 피로도(프로그래머스 스쿨) (0) | 2023.02.09 |