728x90
https://programmers.co.kr/learn/courses/30/lessons/83201
2주차 챌린지 문제가 올라왔다.
문제가 꽤나 길다!
간단하게 이야기하면 각자 모두에게 평가를 한다. 그리고 자기가 받은 점수 중에 스스로 평가한 점수가 유일한 최고점이거나 최저점일 경우 그 값을 빼고 평균을 내어 성적을 출력한다는 내용이다.
처음엔 각 학생들마다의 성적리스트를 만들어서 모두 넣어버릴 생각을 했다.
그런데 그건 너무 비효율적이기도하고.. 조금 생각해보니까 한명한명 점수산출하고 다음 사람을 출력하는것이 더 낫겠다는 생각이 들었다.
def solution(scores):
answer = ''
for i in range(len(scores)):
tempt=[]
for j in range(len(scores)):
tempt.append(scores[j][i])
if max(tempt) == scores[i][i] and tempt.count(max(tempt)) == 1:
tempt.remove(max(tempt))
elif min(tempt) == scores[i][i] and tempt.count(min(tempt)) == 1:
tempt.remove(min(tempt))
일단 이렇게 한명한명의 점수를 확인할 수 있다.
이중반복문인 것이 마음에 들지는 않지만..일단 즉각적인 아이디어를 떠올렸고 확인하는 것이 우선이었으니까!
효율 부분은 시간을 두고 천천히 고쳐나가면 되니까..
이제 점수만 산출하면 된다. 무지 쉽다.
avg = sum(tempt)/len(tempt)
if avg >= 90:
answer += 'A'
elif avg >= 80:
answer += 'B'
elif avg >= 70:
answer += 'C'
elif avg >= 50:
answer += 'D'
else:
answer += 'F'
return answer
코딩 초보자가 봐도 알기 쉬운 코딩!
코딩은 효율과 직관성이 가장 중요하다고 생각한다.
아무리 압축해놔도 다른 사람이 알기 힘들면 뭔 소용이람
그렇게 완성된 최종코드는
def solution(scores):
answer = ''
for i in range(len(scores)):
tempt=[]
for j in range(len(scores)):
tempt.append(scores[j][i])
if max(tempt) == scores[i][i] and tempt.count(max(tempt)) == 1:
tempt.remove(max(tempt))
elif min(tempt) == scores[i][i] and tempt.count(min(tempt)) == 1:
tempt.remove(min(tempt))
avg = sum(tempt)/len(tempt)
if avg >= 90:
answer += 'A'
elif avg >= 80:
answer += 'B'
elif avg >= 70:
answer += 'C'
elif avg >= 50:
answer += 'D'
else:
answer += 'F'
return answer
아주 훌륭하게 결과가 나온 것을 확인할 수 있었다.
위 코딩에서 손을 본다면 이중반복문을 좀 없애고 싶긴 하다.
뭔가 날 것 그대로의 느낌이랄까.. 아직 생각은 안해봤지만..
728x90
'코딩테스트' 카테고리의 다른 글
LG 코딩테스트 예제 - 마리오 게임 (0) | 2021.09.07 |
---|---|
프로그래머스 - 2016년 (0) | 2021.08.10 |
프로그래머스 - 부족한 금액 계산하기 (0) | 2021.08.04 |
프로그래머스 - 문자열 다루기 기본 (0) | 2021.07.22 |
프로그래머스 - K번째수 (0) | 2021.07.21 |