Front-end Developer
백준 알고리즘 4344번 [파이썬] 본문
배운 내용
1. 두 변수에 한번에 인풋을 할 때 어떻게 split()을 사용해야되는지 배웠습니다. input().split(" ", 1)은 첫번 째 띄어쓰기를 기준으로 split을 해서 두 변수에 나눠준다는 뜻입니다.
2. 이 문제는 문제를 정확하게 이해하지못해서 계속 헤맸던것 같다. 문제를 정확하게 읽는 중요성을 배웠다.
3. 특정 decimal point까지 값을 줄 때 round를 사용해서는 안되고, %.nf %(value) 형식을 사용해야된다.
문제
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
문제풀이
# N = 테스트 케이스, 테스트 케이스 숫자에 따라 반복문이 돌수있게 설정
N = int(input())
# list에다가 각 클래스의 퍼센트를 구해서 저장
list = []
# 학생 수와 점수들을 각 각 n과 lst에 split해서 저장
for i in range(N):
n,lst = input().split(" ",1)
n = int(n)
lst = lst.split()
A = 0
# A에 lst안에있는 점수의 총합을 구한다.
for i in lst:
A = A + int(i)
average = A/n
number = 0
# average를 넘는 점수가 있으면 number값에 1씩 더한다.
for i in lst:
if int(i) > average:
number = number + 1
# decimal point를 특정 부분까지 주고 끝에 %를 붙이려면 '%.nf%%'을 사용한다.
percent = ("%.3f%%" %((number/n)*100))
list.append(percent)
# for문을 돌려서 각 클래스의 평군값을 한줄씩 나오게 한다.
for i in list:
print(i)
다른 사람 풀이
# 예시 [5 50 50 70 80 100]
n = int(input())
# map = 리스트의 요소를 지정된 함수로 일괄처리
# range = for문의 요소를 자동으로 숫자 리스트로 만들어줌
for i in range(n):
nums = list(map(int,input().split())) # nums 변수에 리스트로 저장
avg = sum(nums[1:])/nums[0] # 평균 구하기
count = 0
for score in nums[1:]:
if score > avg :
count += 1 # 평균 이상인 학생의 수
rate = count/nums[0] * 100
print('%.3f%%' %rate) #반올림하여 소숫점 세자리까지 출력
내 코드보다 간단하고 학생수와 점수를 split한게 아니라 한 리스트에 두었다. list[1: ]는 리스트에서 index 1부터 마지막 숫자까지 불러온다. 이 값들을 sum()에 넣었을 때 저절로 더해지는것을 알 수 있었다. 이런 형식으로 코드를 사용했을 때 훨씬 간편하게 코딩할 수 있다.
'알고리즘' 카테고리의 다른 글
백준 알고리즘 11729 [파이썬] (0) | 2021.03.09 |
---|---|
백준 알고리즘 1929 [파이썬] (0) | 2021.03.09 |
백준 알고리즘 1157 [파이썬] (0) | 2021.03.06 |
알고리즘 : 정렬(Sort), 탐색(Search) (0) | 2021.02.23 |
알고리즘 : 선형 배열(Linear Arrays) (0) | 2021.02.21 |
Comments