문제는 이 곳 링크를 참조하길 바란다.
def rotate(matrix):
copy_matrix = [list(row)[::-1] for row in zip(*matrix)]
for i in range(len(copy_matrix)):
copy_matrix[i] = copy_matrix[i][::-1]
return copy_matrix
def solution(scores):
scores = rotate(scores)
answer = ''
for i in range(len(scores)):
temp = 0
count = 0
for j in range(len(scores[i])):
if i == j:
if scores[i].count(scores[i][j]) == 1 and (min(scores[i]) == scores[i][j] or max(scores[i]) == scores[i][j]):
continue
else:
temp += scores[i][j]
count += 1
else:
temp += scores[i][j]
count += 1
if 90 <= temp/count:
answer += 'A'
elif 80 <= temp/count < 90:
answer += 'B'
elif 70 <= temp/count < 80:
answer += 'C'
elif 50 <= temp/count < 70:
answer += 'D'
else:
answer += 'F'
return answer
위클리 챌린지 2번째 문제인 상호 평가 문제이다. 해결법은 정말 문제를 안읽어보지 않은 이상 모를 수가 없을 정도로 자세하게 되어있다. 따라서 어떻게 풀었는지 코드를 설명하겠다. 먼저 rotate라는 함수를 정의하여 scores리스트를 넣어주었다. rotate함수는 함수를 오른쪽으로 90도로 회전하고 좌우로 뒤집게 만들어 놓았다. 한마디로 [[50,90],[50,87]] 함수가 있다면 [[50,50],[90,87]] 이렇게 바꾼 것이다. 그 후 반복문을 돌면서 인덱스 i와 j가 같아질 때 그 때의 scores값이 유일하고 그 행에서 가장 작거나 가장 크다면 그 값을 건너뛰게 만들었다.
그게 아닐시에는 temp에 값을 더해주고 count를 +1 해주었다. 그리고 조건에 따라 ABCDF를 붙여주면 끝난다. 문제는 정말 간단하게 구현으로 풀었지만 이중 반복문을 사용하고 거기에 count함수등등을 사용하며 시간복잡도 고려를 안하고 말 그대로 구현으로 풀었다. 만약 더 좋은 해결법이 있으면 그 것을 보는 것이 좋을 것 같다.