문제 설명
간단한 문제 설명
자기 자신을 평가한 점수가 다른 학생이 평가해준 점수보다 유일한 최고점이거나 최저점이라면 평균을 구할 때 제외한다. 단, 최고점이나 최저점이 여러 개라면 제외하지 않고 평균을 구하고 학점을 부여한다.
문제 풀이
처음에 주어진 함수는 이렇다.
def solution(scores):
answer = ''
return answer
위의 메서드와 입출력 예를 보면 2차원 배열의 scores가 인자로 들어가 있다.
입출력 예 1번을 풀어서 보여주겠다.
입력을 받으면 1번과 같이 표현을 할 수 있다.
행(가로) 방향으로 보면 A학생이 A~E학생의 평가한 점수를 나타내는 것이고
열(세로) 방향으로 보면 A학생의 점수를 볼 수 있게 된다.
그리고 자기 자신을 평가한 점수가 간단한 설명에서도 말했다시피 유일한 최고점이거나 최저점일 경우를 생각하여 2번과 같이 표현할 수 있고 2번에서 유일한 최고점, 최저점이 걸러진 평균점수를 3번과 같이 식으로 나타낼 수 있다.
마지막으로 3번에서 구한 평균 점수를 4번과 같이 성적을 조건에 맞게 부여해주어 한 줄로 출력하면 된다.
문제 풀이 방식
그림의 1번에서 보면 열 방향으로 데이터를 보고 있기 때문에 행 X 열을 바꿔주는 작업을 해야 한다.
그래서 내가 생각한 행 X 열 뒤집기 방법은 아래와 같은 코드이다.
eval_l = [[scores[i][j] for i in range(len(scores))] for j in range(len(scores))]
문제를 풀고 나서 찾아보니 zip() 함수를 이용해 행열을 쉽게 바꿀 수 있더라...
자기 자신을 평가한 점수가 유일한 최고점이라면 이렇게 표현할 수 있다.
일단 자기 자신을 평가한 점수가 해당 배열에서 최고점이고 최고점의 개수가 1개일 때 해당 배열에서 remove 해주는 것이다.
if eval_l[i][i] == max(eval_l[i]) and eval_l[i].count(max(eval_l[i])) == 1:
eval_l[i].remove(eval_l[i][i])
마찬가지로 최저점도 위와 같다.
if eval_l[i][i] == min(eval_l[i]) and eval_l[i].count(min(eval_l[i])) == 1:
eval_l[i].remove(eval_l[i][i])
완성된 코드!!😀😀👍👍
def solution(scores):
avg = []
answer = ''
eval_l = [[scores[i][j] for i in range(len(scores))] for j in range(len(scores))]
for i in range(len(eval_l)):
if eval_l[i][i] == max(eval_l[i]) and eval_l[i].count(max(eval_l[i])) == 1:
eval_l[i].remove(eval_l[i][i])
elif eval_l[i][i] == min(eval_l[i]) and eval_l[i].count(min(eval_l[i])) == 1:
eval_l[i].remove(eval_l[i][i])
else:
continue
avg += [sum(eval_l[i]) / len(eval_l[i]) for i in range(len(eval_l))]
for score in avg:
if score >= 90:
answer += 'A'
elif 80 <= score < 90:
answer += 'B'
elif 70 <= score < 80:
answer += 'C'
elif 50 <= score < 70:
answer += 'D'
else:
answer += 'F'
return answer
print(solution(
[[100, 90, 98, 88, 65], [50, 45, 99, 85, 77], [47, 88, 95, 80, 67], [61, 57, 100, 80, 65], [24, 90, 94, 75, 65]]))
print(solution([[50, 90], [50, 87]]))
print(solution([[70, 49, 90], [68, 50, 38], [73, 31, 100]]))
해당 문제 프로그래머스 사이트다. 풀어볼 사람은 풀어보시길...
여담... 문제 끝까지 안 보고 행 X 열을 바꿔서 생각하기 전에 왜 평균이 저렇게 나오고 학점이 저렇게 부여되는지 조차 이해가 되지 않았다... 맨날 알고리즘 풀 때마다 문제 끝까지 안 보고 풀어서 항상 런타임 에러나 틀렸습니다.. 가 나오는데... 학습능력이 없는 건지... ㅋㅋㅋ 맨날 다시 보게 된다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[python] 위클리 챌린지 - 1주차 부족한 금액 계산하기 (0) | 2021.10.09 |
---|---|
[java] 프로그래머스 - 부족한 금액 계산하기 (2) | 2021.08.09 |
펄의 일상이 궁금한 사람 요기~
즐거운 하루 되셨으면 좋겠습니다😊