본문 바로가기
IT/알고리즘

1일 1알고리즘 - #5

by Sungjun_ 2020. 5. 14.

문제

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 �

www.acmicpc.net

위 사이트에서 확인해주세요.

 


풀이

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

댓글