본문 바로가기

알고리즘 예시/백준

[Baekjoon] 백준 #4344번 파이썬 해답

320x100
백준 알고리즘 단계별로 풀어보기의 1차원 배열,
아홉번째, <평균은 넘겠지> 문제입니다.

 

먼저 문제를 한번 읽어보겠습니다.

 

문제 제시

출력 부분에서 소수점 셋째 자리까지 출력해야 하는 것을 확인하실 수 있습니다.

이쯤에서 format, 혹은 F-스트링을 써야 한다는 생각이 들었으면 합니다.

 

f'{p:.3f}%'

 

 

입력 예시도 보겠습니다.

 

 

정답 공개

 

C = int(input())
B=[]
for _ in range(C):
    A = list(map(int, input().split()))
    av = sum(A[1:])/ A[0] # 평균
    c = 0
    for i in A[1:]:
        if i > av:
           c = c+1
    p = (c / A[0])*100 # 퍼센트에이지 계산
    print(f'{p:.3f}%') # 소숫점 형태로 변환함 (F-스트링 사용)

 

설명


먼저, 입력받는 수와 1차원 배열 문제이기 때문에 C와 빈 리스트를 

받아주는 것은 당연하겠죠.

 

C = int(input())
B=[]

 

그리고 나서 for문을 쓰는데, 특별히 반복되는 변수 자리를 안정하고 싶을때는

for 다음에 '_' (언더바)를 사용합니다. 이는 해당 자리를 무시한다는 뜻입니다.

 

for _ in range(C):

 

이 문제에 특징적인 부분은 "학생의 수" 다음에 "학생들의 점수"가 띄어쓰기 다음

바로 나온다는 것입니다.

 

예시

 

3명의 학생이 70점, 90점, 80점을 받았을 때의 입력입니다.

3 70 90 80

 

그렇기 때문에 두번째 줄을 리스트로 받더라도, 가장 앞의  값과 그 이후의 값을 구분해야 합니다.

 

for _ in range(C):
    A = list(map(int, input().split())
    A[1:] # 여기서부터 코드 제작

 

리스트 슬라이싱을 사용합니다.

점수의 평균을 구해야 하기 때문이죠.

 

for _ in range(C):
    A = list(map(int, input().split())
    av = sum(A[1:])/len(A[0]) # A[0]에 인원수가 선언됨

 

평균 이상의 점수를 받은 아이들의 인원을 넣어줄 c를 선언하고,

for문을 넣어줍니다.

 

C = int(input())
B=[]
for _ in range(C):
    A = list(map(int, input().split()))
    av = sum(A[1:])/ A[0] # 평균
    c = 0
    for i in A[1:]:
        if i > av:
           c = c+1

 

이처럼 평균점수 이상의 학생이 쌓일때마다 c가 1씩 상승합니다.

평균 이상을 받은 인원 / 전체 인원을 받아줄 p를 선언합니다.

 

C = int(input())
B=[]
for _ in range(C):
    A = list(map(int, input().split()))
    av = sum(A[1:])/ A[0] # 평균
    c = 0
    for i in A[1:]:
        if i > av:
           c = c+1
    p = (c / A[0])*100

 

처음에 제시했던 f스트링을 사용해서 % 기호와 소수점 셋째 자리까지

표현하도록 합니다.

 

C = int(input())
B=[]
for _ in range(C):
    A = list(map(int, input().split()))
    av = sum(A[1:])/ A[0] # 평균
    c = 0
    for i in A[1:]:
        if i > av:
           c = c+1
    p = (c / A[0])*100 # 퍼센트에이지 계산
    print(f'{p:.3f}%')

 

 

완성

 

 

728x90