코딩공부/알고리즘

[파이썬 풀이] 백준 1546.평균

잉옐잉 2021. 11. 23. 01:51

문제   

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

 

입력   

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

 

출력   

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10^-2 이하이면 정답이다.

 

코드   

N = int(input())
scores = list(map(int, input().split()))

output = 0
for i in range(N):
    output += scores[i]/max(scores)*100

output = output/N

print(output)

 

관련 개념 정리   

input

파이썬에서는 값을 사용자로부터 입력받을때 input함수를 사용합니다.

입력받은 값을 넣을 변수 이름 = input("띄울 메세지")

 

단! input함수는 입력받은 모든 내용을 문자열로 인식합니다. 따라서 입력받은 내용을 정수로 변환하려면

d = int(input())

와 같은 형태로 작성하거나,  나중에 변수를 사용할때

print(int(d)+2)

와 같이 int()로 감싸서 작성할 수 있습니다.

 

 

map

map함수는 입력받은 자료형의 각 요소를 함수가 적용된 값으로 변형 시켜주는 함수입니다.

map(함수, 반복 가능한 자료형)

위와 같은 형태로 사용 가능합니다.

예시)

def dddd(x):
    return x+3

print(list(map(dddd,[2,5,1,8])))

# [5, 8, 4, 11]

 

 

list

list함수는 반복 가능한 자료형을 받아 리스트로 만들어 주는 함수입니다.

list(반복 가능한 자료형)

위와 같은 형태로 사용 가능합니다.

print(list("배고파"))
#['배', '고', '파']

print(list((1,6,3)))
#[1, 6, 3]

print(list([3,5,2]))
#[3, 5, 2]

문자열을 입력 받은 경우에는 한글자씩 쪼개서 리스트를 만듭니다.

숫자로 된 리스트를 만들기 위해서는 ,(쉼표) 로 구분해서 ()괄호 안에 입력하면 됩니다.

list에 list를 입력한 경우에는 아무런 변화 없이 입력한 list를 그대로 retrun합니다.

 

 

split

또한 값을 입력받을 때, 한 번에 여러 값을 입력받을 수 있습니다.
그때 사용할 수 있는 함수가 바로 split 함수입니다.

split할 변수 이름.split('구분자')

 

만약 split()일 경우, space, tap, enter와 같은 공백을 기준으로 문자열을 나눕니다.

 

 

for문

특정 코드들을 원하는 횟수 만큼 반복 시킬 때 사용하는것이 for문입니다.

for문의 기본 구조는 아래와 같습니다.

for i in 리스트(or 문자열, 튜플):
	실행할 코드

리스트,문자열,튜플의 첫 글자나 요소부터 마지막 글자나 요소까지 차례대로 변수에 대입됩니다.

 

for문의 범위와 변수값을 숫자로 정하고 싶을때는 아래와 같이 range함수를 사용합니다.

for i in range(시작숫자,종료숫자,step):
	실행할 코드

step은 얼만큼씩 변수를 증가 시킬지 정하는 것 입니다.

시작숫자와 step은 생략되어도 됩니다.

 

i를 사용하지 않고 코드를 반복만 하고 싶은 경우, i자리를 _(언더바)로 대체해서 사용합니다.

 

 

산술 연산자

x+y x 더하기 y
x-y x 빼기 y
x*y x 곱하기 y
x/y x 나누기 y
x//y x 나누기 y의 몫
x%y x 나누기 y의 나머지
x**y x의 y제곱

 

 

min, max

min과 max는 각각 최솟값과 최댓값을 리턴하는 함수로, 아래와 같이 사용합니다.

min(반복 가능한 자료형) #최솟값 리턴
max(반복 가능한 자료형) #최댓값 리턴