[프로그래머스] 등수 매기기_python
1. 문제
1 - 1. 문제 설명
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 잠은 2차춴 정수 배열 score가 주어질때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return 하도록 solution함수를 완성해주세요
1 - 2. 제한사항
- 0 ≤ score[0], score[1] ≤ 100
- 1 ≤ score의 길이 ≤ 10
- score의 원소 길이는 2입니다.
- score는 중복된 원소를 갖지 않습니다.
1 - 3. 입출력 예 설명
입출력 예#1
- 평균은 각각 75,70,55,65이므로 등수를 매겨 [1,2,4,3]을 return 합니다
입출력 예 #2
- 평균은 각각 75,75,40,95,95,100,20이므로[ 4,4,6,2,2,1,7 ]을 return합니다.
공동 2등이 두명 , 공동 4등이 2명이므로 3등과5등은 없습니다.
2. 문제해결방법
입출력 예를 봤을 때 등수를 매기는 것에서 index메소드를 사용해야하는것을 알았다. 이 문제의 핵심은 인덱스를 구하는데 순위가 안 바뀌고 똑같은 배열에서 다른 인덱스를 반환하는 것이다.
1.평균을 내 sub_score 매개 변수에 담는다
2. sort_arr 매개 변수에 내림차순으로 정렬한 값을 지정한다.
3. for문을 이용해 sub_score(정렬이 안된 값의 리스트)값을 하나씩 빼서 sort_arr(정렬이 된 값의 리스트)의 인덱스를 찾는다. 인덱스는 0부터 시작하여 1을 더해주면 1부터 시작이된다. 그리고 answer라는 매개변수에 담는다.
def solution(score):
answer =[]
sub_score = []
for i in range(len(score)):
sub_score.append((score[i][0]+score[i][1]) //len(str(i)))
sort_arr = sorted(sub_score,reverse=True)
for k in sub_score:
answer.append(sort_arr.index(k)+1)
return answer
3. 다른 사람 풀이
def solution(score):
a = sorted([sum(i) for i in score], reverse = True)
return [a.index(sum(i))+1 for i in score]
컨프리헨션으로 간결하게 코드를 구현한 사람 코드를 가져왔다. 여기에서 새롭게 알게 된것은 굳이 평균을 안 구해도 값을 구할수 있다는 거였다.
4. 느낀점
컨프리헨션을 구현하는것은 생각보다 어려운것같다. 원리를 보면 쉬운 구조로 되어있지만 막상 컨프리헨션을 써서 구현하라고 하면 갑자기 머리속이 아무 생각도 안난다. 연습만이 살 길이다. 꾸준하게 연습을 해야겠다는 생각이든다.