[프로그래머스(파이썬/Python)] 상호 평가
kindof
·2021. 8. 18. 16:31
https://programmers.co.kr/learn/courses/30/lessons/83201
올 해 네이버 공채 코딩테스트에서 봤던 문제랑 똑같은 문제입니다. 프로그래머스에 네이버 문제도 오픈되는 것 같네요.
본론으로 들어가서, 이 문제는 당시 코딩테스트에서 1번 문제로 나왔을만큼 어렵지 않은 문제입니다.
다만, 이 문제에서 가장 중요한 포인트는 "문제를 잘 읽어야 한다"는 점입니다. 알고리즘 문제를 풀 때마다 느끼는 점인데 분명 맞는데 왜 틀리지? 하는 시점이 오면 문제를 무조건 다시 읽어야 합니다. 그리고 이 상황을 미연에 방지하기 위해서도 문제를 잘 읽어야 하죠.
이 문제를 풀 때도 자신이 준 점수가 아닌, 자신이 받은 점수를 기준으로 생각해야 한다는 점이 중요합니다.
[풀이]
def setGrade(score):
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 50:
return 'D'
else:
return 'F'
def solution(scores):
answer = ''
n = len(scores)
for i in range(n):
myScores = [] # 자신이 받은 점수
for j in range(n):
myScores.append(scores[j][i])
# 자신의 점수가 유일한 최대 혹은 최소라면 전체 점수에서 제외
total,count = sum(myScores), n
myScore = myScores[i]
if (myScore == max(myScores) or myScore == min(myScores)) and myScores.count(myScore) == 1:
total -= myScore
count -= 1
answer += setGrade(total / count)
return answer
ps. 다른 사람의 풀이를 보다가 행과 열을 뒤집어서 편하게 문제를 푸는 사람들을 봤다. 파이썬에서 행과 열을 Transpose할 때는 아래와 같이 zip 함수를 이용하면 된다!
my_list = [[1,2,3], [4,5,6], [7,8,9]]
transpose_list = [[], [], []]
// zip 함수 없이 바꾸기
for i in range(3):
for j in range(3):
transpose_list[i].append(my_list[j][i])
// zip 함수 이용
transpose_list = list(map(list, zip(*my_list))
'Algorithm' 카테고리의 다른 글
[백준(파이썬/Python)] 4485_녹색 옷 입은 애가 젤다지? - 다익스트라 (0) | 2021.08.20 |
---|---|
[백준(파이썬/Python)] 1261_알고스팟 (0) | 2021.08.19 |
[백준(파이썬/Python)] 10830_행렬 제곱 (0) | 2021.08.11 |
[백준(파이썬/Python)] 5639_이진 검색 트리 (0) | 2021.08.08 |
[백준(파이썬/Python)] 1062_가르침 (0) | 2021.08.07 |