일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 시스템 소프트웨어
- icmp
- IT5분잡학사전
- 쉽게 배우는 데이터 통신과 컴퓨터 네트워크
- 노마드코더
- 이코테
- CS
- 이것이 취업을 위한 코딩 테스트다
- 라우팅
- RARP
- 데이터통신
- 컴퓨터네트워크
- 리스트
- 파이썬 연산자
- 쿠키
- 노개북
- 컴퓨터 동작방식
- 북클럽
- 데이터 통신과 컴퓨터 네트워크
- 파이썬 정렬
- 이것이 취업을 위한 코딩테스트다
- 자료형
- OSI7계층모델
- 기억장치
- ARP
- sort()
- data type
- 파이썬 자료형
- GIT
- DP
Archives
- Today
- Total
뚝딱햄 탈출기
[Python][백준 BOJ Bronze I] 4344. 평균은 넘겠지 : f-string 소수점 출력 포맷팅, 배열 슬라이싱 본문
Algorithm & Data structure/알고리즘 문제 풀이
[Python][백준 BOJ Bronze I] 4344. 평균은 넘겠지 : f-string 소수점 출력 포맷팅, 배열 슬라이싱
hyrmzz1 2023. 12. 14. 19:32
핀토스에 절여진 뇌를 부여잡고 오랜만에 알고리즘 풀었당!👩💻
수월하게 풀었지만 백분율 출력 방식에 대해 배워 포스팅을 끄적여본다✍️
접근 방식
- 한 줄씩 입력 받고 (c 줄 만큼)
- 각 줄의 평균 점수를 구해서
- 각각의 점수가 평균치를 넘으면 cnt += 1
- 학생 수에 대한 cnt의 비율을 출력한다.
비율은 반올림해 소수점 셋째 자리까지 출력해야 한다. => f-string 이용
✅ Solution 1
import sys
c = int(sys.stdin.readline()) # tc 개수
for _ in range(c):
n = list(map(int, sys.stdin.readline().split()))
avg = (sum(n) - n[0]) / n[0]
cnt = 0
for i in range(1, len(n)):
if n[i] > avg:
cnt += 1
rate = cnt * 100 / n[0]
print(f'{rate:.3f}%')
변수를 원하는 포맷으로 출력하고 싶다면 아래의 형식처럼 작성하면 된다.
print(f'{변수:타입 지시자}')
소숫점 자리수 포맷팅을 하기 위해서는 .3f
와 같이 타입 지시자를 작성하면 된다. .3
은 소수점 셋째 자리까지, f
는 float을 의미한다.
소숫점 둘째 자리까지만 출력하고 싶다면 .2f
와 같이 작성해주면 된다.
f-string으로 퍼센트 포맷팅도 가능하다. 현재 코드처럼 %를 밖에 작성할 필요 없이 타입 지시자를 .3%
로 작성하면 된다.
import sys
c = int(sys.stdin.readline()) # tc 개수
for _ in range(c):
n = list(map(int, sys.stdin.readline().split()))
avg = (sum(n) - n[0]) / n[0]
cnt = 0
for i in range(1, len(n)):
if n[i] > avg:
cnt += 1
rate = cnt * 100 / n[0]
print(f'{rate:.3%}')
✅ Solution 2 - 슬라이싱 이용
슬라이싱을 떠올리지 못한 상태로 Solution 1처럼 구현했는데,
Solution 2에서는 avg
를 초기화할 때와 for문에서 범위를 지정할 때 슬라이싱을 이용했다.
import sys
c = int(sys.stdin.readline()) # tc 개수
for _ in range(c):
n = list(map(int, sys.stdin.readline().split()))
avg = sum(n[1:]) / n[0] # avg = (sum(n) - n[0]) / n[0]
cnt = 0
for i in n[1:]: # for i in range(1, len(n)):
if i > avg: # if n[i] > avg
cnt += 1
rate = cnt * 100 / n[0]
print(f'{rate:.3%}')
💭What I learned
- 배열의 특성인 인덱싱과 슬라이싱을 잘 활용하자
- for문에서 범위를 지정할 때에도 슬라이싱을 활용한다.
- 소수점 아래까지 출력해야 할 때 f-string을 사용한다.
https://www.acmicpc.net/problem/4344
'Algorithm & Data structure > 알고리즘 문제 풀이' 카테고리의 다른 글
[Python][백준 BOJ Silver IV] 1269. 대칭 차집합 : set 자료형을 이용한 교집합/합집합/차집합 구하기 (1) | 2024.01.02 |
---|---|
[Python][백준 BOJ Silver V] 2628. 종이 자르기 : 정렬, 리스트 컴프리헨션을 활용한 출력 (0) | 2023.12.16 |
[Python][백준 BOJ Bronze I] 2869. 달팽이는 올라가고 싶다 : 반복문으로 인한 시간 초과 해결 (1) | 2023.12.05 |
[Python][백준 BOJ Bronze I] 10989. 수 정렬하기 3 : 메모리 초과 해결, 계수 정렬 (0) | 2023.12.04 |
[Python][백준 BOJ Silver II] 1541. 잃어버린 괄호 : enumerate (5) | 2023.10.29 |
Comments