등수를 매기는 문제다. 솔직히 이게 왜 실버 3문제가 된지 모르겠다. 정답율 보고 정해지는 기준인가..
학생들이 예상한 등수를 보고, 그 등수에 적당히 끼워맞춰서 예상 결과와의 차이를 최소한으로 줄이는 것이다.
실제로 등수 결과를 이렇게 하면 모든 응시자들 사이에서 난리가 났을거다
불만도는 등수-예상등수의 절댓값만큼 쌓인다.
그리고 그 최소한의 불만도 값을 출력하는 것이 문제의 내용이다.
처음에는 이렇게 접근했다.
5명이 test case로 제시된 경우, 등수는 1등에서 5등까지 순차적으로 나눠지기 때문에 1~5를 더한다.
1~5를 더한 값은 5*6/2 = 15.
그리고 학생들이 예상한 등수를 받아서 모두 합한다.
문제의 예시에 나온 것처럼 1,5,3,1,2인 경우 모두 더하면 12.
15에서 12를 빼면 3이다. 그래서 이것을 print해주는 방식으로 하면 된다.
그러나 결과는...땡! 틀렸습니다!!(...)
어느 test case에서 오답이 나왔는지 알 수 없어서 그런지 답답하다.
단순하게 10등까지 계산해본 값은 정답 결과랑 비교해봤을때 얼추 다 맞았는데 어디서 틀린지 잘 모르겠다.
어쨌든 틀렸다고 하니 이번엔 꼼수를 안쓰고 문제에 맞게 정석적으로 해결해보기로 했다.
값을 받고 오름차순으로 정렬한다. 그럼 작은(높은) 등수부터 차례로 정렬된다.
for 문에서 i는 기본적으로 0부터 시작하므로 예상 등수에서 i+1을 차감하여 각 학생의 불만도에 더한다.
가령 오름차순 결과 배열이 1,2,3,3,5가 되었을 때 불만도를 계산해보면,
|1-(0+1)| + |2-(1+1)| + |3-(2+1)| + |3-(3+1)| + |5-(4+1)| = 0+0+0+1+0 = 1이다.
구해준 불만도를 출력해주면 끝!
'공부 > 백준' 카테고리의 다른 글
[백준] 1152번 (0) | 2022.06.15 |
---|---|
[백준] 10773 (0) | 2022.06.15 |
[백준] 1252번 (0) | 2022.06.15 |
[백준] 2417번 (0) | 2022.06.15 |
[백준] 17478번 (0) | 2022.06.15 |