from collections import Counter
def solution(scores):
answer = ''
average_scores = []
for j in range(len(scores[0])):
score_list = []
self_score = 0
for i in range(len(scores)):
score_list.append(scores[i][j])
if i == j:
self_score = scores[i][j]
score_counter = Counter(score_list)
if self_score == min(score_list) or self_score == max(score_list):
if score_counter.get(self_score) == 1:
score_list.remove(self_score)
average_scores.append(sum(score_list) / len(score_list))
for grade in average_scores:
if grade >= 90:
answer += "A"
elif grade >= 80:
answer += "B"
elif grade >= 70:
answer += "C"
elif grade >= 50:
answer += "D"
else:
answer += "F"
return answer
Counter를 이제 문제풀 때 필요하면 사용하자.
def solution(scores) :
avgs=[]
score=[ [i[j] for i in scores] for j in range(len(scores))]
for idx,i in enumerate(score) :
avg=sum(i) ; length=len(i)
if i[idx] == max(i) or i[idx] == min(i) :
if i.count(i[idx]) == 1 :
avg-=i[idx] ; length-=1
avgs.append(avg/length)
return "".join([ avg>=90 and "A" or avg>=80 and "B" or avg>=70 and "C" or avg>=50 and "D" or "F" for avg in avgs ])
numpy를 사용하지 않고 행열 뒤집는 방법
하지만 위의 코드는 정사각행렬일 때만 작동한다.
2차언 배열을 *(asterik)로 unpacking한 후 다시 zip으로 묶으면 transpose가 된다.list(zip(*relation))
이 코드는 정사각행렬이 아니여도 작동한다. 하지만 내부가 튜블이 된다는단점이 있기는하다.
내부 동작 순서를 보자면 이렇다.
print(*relation) print(list(zip(*relation)))
['100', 'ryan', 'music', '2'] ['200', 'apeach', 'math', '2'] ['300', 'tube', 'computer', '3'] ['400', 'con', 'computer', '4'] ['500', 'muzi', 'music', '3'] ['600', 'apeach', 'music', '2'] [('100', '200', '300', '400', '500', '600'), ('ryan', 'apeach', 'tube', 'con', 'muzi', 'apeach'), ('music', 'math', 'computer', 'computer', 'music', 'music'), ('2', '2', '3', '4', '3', '2')]
우선 2차원 배열을 제일 밖의 배열을 없애서 쭉 나열하고, zip을 사용하니 각 배열에서 하나씩 가져와서 새로 묶는 것이다.