4344번 : 평균은 넘겠지 문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다.
당신은 그들에게 슬픈 진실을 알려줘야 한다.😥
https://www.acmicpc.net/problem/4344
풀이 코드
c = int(input())
for _ in range(c):
array = list(map(int, input().split()))
s = sum(array[1:])
average = s/array[0]
count = 0
for j in array[1:]:
if j > average:
count += 1
print(f'{count/array[0] * 100:.3f}%')
c = int(input())
- 첫째 줄에서 테스트 케이스의 개수 c 을 입력받음
- input() 은 한 줄의 문자열만 입력받을 수 있음
- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용
for _ in range(c):
- 입력받은 테스트 케이스의 개수만큼 for 문을 반복
- _ (언더바)를 사용하여 반복을 수행하되, 반복을 위한 변수의 값을 무시
array = list(map(int, input().split()))
- 공백으로 구분되는 여러개의 데이터를 입력받기 위한 방법
- input().split() 으로 문자열을 공백으로 나눈 리스트로 바꿈
- map 을 이용하여 리스트의 모든 원소에 int() 함수를 적용
- 그 결과를 다시 list() 로 전환하여, 입력받은 문자열을 각각 숫자 자료형으로 저장
s = sum(array[1:])
- sum() 함수는 리스트와 같은 iterable 객체가 주어졌을 때, 모든 원소의 합 반환
- 2번째 수부터 N명의 점수가 주어지므로, array([1:]) 로 1번 인덱스부터 반환
average = s/array[0]
- 평균을 구하는 수식
- 앞서 sum 함수로 구한 s 의 값을, 학생의 수인 array[0] 으로 나누어 average 에 저장
count = 0
- 평균이 넘는 학생 수를 세기 위한 변수
- 0으로 초기화
for j in array [1:]:
- array[1:] 를 이용하여 인덱스 1번 원소부터 순차 반복
( 인덱스 0번 원소는 학생 수를 나타내는 N 이므로 제외)
- 'for 변수 in 리스트' 형태로, 리스트에 포함되어 있는 원소를 하나씩 방문
- in 뒤에 오는 데이터로는 리스트, 튜플, 문자열 등이 사용 가능
if j > average: count += 1
- array 리스트의 인덱스 1번부터 순차 탐색한 점수가 평균보다 높은 경우
- count 값을 1 증가
print(f'{count/array[0] * 100:.3f}%')
- count(평균 이상 학생 수)/array[0](총 학생 수) * 100 으로, 평균이 넘는 학생들의 비율을 구함
- f-string 에서 .3f 를 이용하여 소수점 셋째 자리까지 출력
[f-string]
- Python 3.6 이상의 버전부터 사용 가능
- 문자열 앞에 'f' 접두사를 붙여 사용
- 단순히 {}(중괄호) 안에 변수를 넣어, 자료형의 변환 없이 간단히 문자열과 정수를 함께 사용 가능
예시) print(f"정답은 {answer} 입니다")
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 4673번 셀프 넘버 (함수) (0) | 2023.02.23 |
---|---|
[백준/Python] 15596번 정수 N개의 합 (함수) (0) | 2023.02.22 |
[백준/Python] 8958번 OX퀴즈 (1차원 배열) (0) | 2023.02.22 |
[백준/Python] 1546번 평균 (1차원 배열) (0) | 2023.02.22 |
[백준/Python] 3052번 나머지 (1차원 배열) (0) | 2023.02.22 |