여러가지 값을 받아 1차원 배열을 만드는 방법
아래에서는 숫자를 입력받기 때문에 int를 사용했지만 문자를 입력받는다면 필요없다.
1. for을 이용해 하나씩 받아 배열에 추가하는 방법
1
2
3
|
data = []
for i in range(9):
data.append(int(input()))
|
cs |
9개의 수를 입력받아 data라는 list에 넣는다.
(줄바꿈으로 다른 수를 구분해서 입력하는 경우)
2. list에 map을 활용하는 방법
1
2
|
import sys
score = list(map(int, sys.stdin.readline().split()))
|
cs |
입력받은 값들을 int형으로 바꾼 후 list에 저장한다
(공백으로 다른 수를 구분해서 넣는 경우)
백준 4344번 문제 - https://www.acmicpc.net/problem/4344
입력받을 값들
1) 케이스의 개수
2) 학생수, 점수들(학생수만큼 입력된다)
내가 작성한 코드
1
2
3
4
5
6
|
import sys
n = int(input())
case_input = []
for i in range(n):
data = list(map(int, sys.stdin.readline().strip().split()))
case_input.append(data)
|
cs |
맨 처음 입력받은 케이스의 개수를 n으로 저장한 후,
학생수와 점수들을 한꺼번에 입력받아 data list에 저장한다.
그것을 case_input에 저장하는 것을 n번 반복한다.
문제의 예제처럼 입력하면 위와 같이 list가 저장된 list(case_input)가 만들어진다.
1
2
3
4
5
6
7
8
9
10
11
12
|
for case in case_input: #case 하나씩 계산
num = case[0]
score_input = case[1:]
total = 0
for score in score_input: #평균 구함
total += score
avg = total / num
count = 0
for score in score_input: #평균보다 큰 점수
if score > avg:
count += 1
print(f"{count/num*100:.3f}%")
|
cs |
for문을 이용해 case 하나씩 계산한다
슬라이싱을 통해 맨 처음수인 학생수(num)와, 그 뒤의 수들인 점수들(score_input)로 분리해준다.
score_input의 숫자들을 하나씩 더해 총점을 구하고, 학생수로 나눠 평균을 구한다.
다시 score_input의 수들을 하나씩 평균과 비교해 평균과 큰 수가 있으면 count를 1씩 증가시킨다.
전체 학생수중에 평균을 넘는 사람수의 비율을 계산헤 출력한다.
소수점 셋째자리까지 출력하기 위해 string-formatting을 사용한다.
내가 사용한 방법은 f-string 이다.
f"출력하기 원하는 {내용}" 형식으로 앞에 f를 붙여줘야 한다.
변수의 이름을 {}으로 감싸서 안에 넣으면 변수를 바로 출력할 수 있다.
문자열 자르기
f"{number:.3f}"
숫자 뒤에 :.3f를 붙여주면 소수점 세번째 자리까지 출력할 수 있다.
참고한 페이지
https://codechacha.com/ko/python-string-formatting/
'알고리즘' 카테고리의 다른 글
백준 - 10809번 / 아스키코드, enumerate() (0) | 2021.07.28 |
---|---|
백준 - 함수 (0) | 2021.07.27 |
백준 - while문 (0) | 2021.07.20 |
백준 - for문 (0) | 2021.07.20 |
백준 - if문 (0) | 2021.07.16 |