풀이 과정
- 열별로 진행한다.
- 최저점인 행, 최고점인 행, 최저점인 인원 수, 최고점인 인원 수를 구한다.
- 평균 계산
- 최저점이거나 최고점인 행이 현재 진행중인 열과 같고(자기 자신이 낸 점수)
- 유일한 인원인지 검사 필요 !! ( 최고점/최저점 인원수가 1인지 )
- 해당 점수는 빼주고, 인원수도 1 줄여준다.
- 이후, 평균을 계산하고 평균에 따라 학점을 매겨주면 된다.
- 구현 문제는 너무 복잡한거 같다..
소스 코드
def solution(scores):
answer = ''
for j in range(len(scores[0])):
min_idx = 0
max_idx = 0
min_count = 1
max_count = 1
score_sum = scores[0][j]
for i in range(1, len(scores)):
# 최저점인지 검사
if scores[i][j] <= scores[min_idx][j]:
# 최저점이면서 동일한 점수가 있다면 인원수 증가
if scores[i][j] == scores[min_idx][j]:
min_idx = i if i == j else min_idx
min_count += 1
else:
min_idx = i
min_count = 1
# 최고점인지 검사
if scores[i][j] >= scores[max_idx][j]:
# 최고점이면서 동일한 점수가 있다면 인원수 증가
if scores[i][j] == scores[max_idx][j]:
max_idx = i if i == j else max_idx
max_count += 1
else:
max_idx = i
max_count = 1
score_sum += scores[i][j]
# 점수 계산 파트( 자기가 낸 점수가 유일한 최고점, 최저점이라면 빼고 계산 )
total_student = len(scores)
if (min_idx == j and min_count == 1) or (max_idx == j and max_count == 1):
p = min_idx if min_idx == j else max_idx
total_student -= 1
score_sum -= scores[p][j]
avg = score_sum / total_student
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
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ 위클리 챌린지 ] [ 5주차 ] 모음 사전 (0) | 2021.09.03 |
---|---|
[ 위클리 챌린지 ] [ 4주차 ] 직업군 추천하기 (0) | 2021.08.24 |
[ Lv 1 ] [ String ] 숫자 문자열과 영단어 (0) | 2021.08.19 |
[ Lv 2 ] 삼각 달팽이 (0) | 2021.08.16 |
[ Lv 2 ] 후보키 (0) | 2021.08.13 |