문제
https://www.acmicpc.net/problem/4344
위 사이트에서 확인해주세요.
풀이
x = int(input()) # 테스트 케이스의 개수 입력
stdScoreList = [] # 입력한 학생 수와 점수를 넣을 리스트
stdNumber = [] # 위 리스트에서 학생 수를 빼서 이 쪽에 넣어줄겁니다.
for i in range(0, x):
studentScore = input().split() # 학생 수와 점수를 입력 받습니다.
stdScoreList.append(studentScore) # 입력 받은 학생 수와 점수를 stdScoreList에 넣어줍니다
number = stdScoreList[i][0] # 학생 수를 number에 저장시킵니다
stdNumber.append(number) # stdNumber에 학생 수를 저장
del stdScoreList[i][0] # stdScoreList에서 첫 번째에 위치한 학생 수를 빼줍니다.
# 학생 수와 점수를 5 50 50 70 80 100
# 이렇게 입력했을 때 stdScoreList = [['50', '50', '70', '80', '100']], stdNumber = ['5']
# 이런 식으로 저장됩니다.
for z in range(0, x): # 입력한 테스트 케이스만큼 돌리기 위한 for문
totalStd = int(stdNumber[z]) # 각 케이스의 학생 수 저장
score = 0 # 초기화
sum = 0 # 초기화
inc = 0 # 초기화
for n in range(0, totalStd): # 학생 수 만큼 점수 개수가 있기 때문에 totalStd를 받음
score = int(stdScoreList[z][n]) # 점수 저장
sum = sum + score # 총합
avg1 = sum / totalStd # 위 for문이 끝나고 한 테스트 케이스의 평균을 구해줌
for n in range(0, totalStd): # 다시 for문을 돌림
score = int(stdScoreList[z][n]) # 다시 점수를 가지고 옴
if score > avg1:
inc += 1 # 점수가 평균 보다 낮으면 inc(사람 수)를 1씩 올림
avg2 = (inc / totalStd) * 100 # 평균 보다 점수가 높은 사람 수의 평균, 값이 0.xxxx 이렇게 나오기 때문에 * 100 해줌
print(format(avg2, '<5.3f') + '%') # 왼쪽으로 정렬, 소수점 셋째 자리까지 출력하고 뒤에 % 붙여줌
주석을 참고해주세요.
결과
문제 풀 때마다 더 간단하게 할 수 있을꺼 같은데 복잡하게 푸는거 같네요..
'IT > 알고리즘' 카테고리의 다른 글
1일 1알고리즘 - #7 (0) | 2020.05.15 |
---|---|
1일 1알고리즘 - #6 (0) | 2020.05.15 |
1일 1알고리즘 - #4 (0) | 2020.05.14 |
1일 1알고리즘 - #3 (0) | 2020.05.13 |
1일 1알고리즘 - #2 (0) | 2020.05.12 |
댓글