1. 문제
https://www.acmicpc.net/problem/1206
1206번: 사람의 수
첫째 줄에 N이 주어진다. 둘째 줄부터 N개의 줄에 각 문항의 평균 점수가 주어진다. N은 50보다 작거나 같은 자연수이고, 평균 점수는 0보다 크거나 같고, 10보다 작거나 같은 소수이다. 항상 소수
www.acmicpc.net
2. 풀이
import sys
import math
input = sys.stdin.readline
# n : 문항 수
n = int(input())
# n_l : 문항별 평균 리스트
n_l = []
for i in range(n):
n_l.append(int(input().split(".")[1]))
# print(n_l)
sCnt = 1
while True:
cntBool = True
for i in n_l:
# print("i :", i, "sCnt :", sCnt)
num = i * sCnt
if num % 1000 != 0:
num = num - (num % 1000) + 1000
# print("olim num :", num)
num = int(num / sCnt)
# print("thousand burim num :", num)
if num != i:
cntBool = False
break
if cntBool:
break
else:
sCnt += 1
print(sCnt)
3. 후기
- 위 문제는 3일에 걸쳐서 해결했던 문제이다.
부동 소수점의 연산이 주요 키워드인 문제로 최대한 실수형 변수값의 연산을 줄이려고 노력하여 해결할 수 있었다.
마지막까지 제거하지 못한 실수형 연산은 데이터를 입력받을 때 소수값에 1000을 곱하는것마저 부동 소수점 연산으로 연산에 오차가 생겨 계속 틀렸다.
부동 소수점 연산은 항상 주의하도록 해야겠다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 폴짝폴짝(1326) (0) | 2023.03.18 |
---|---|
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1254) (0) | 2023.03.15 |
(Python)백준 코딩테스트 연습 - 삼각형으로 자르기(1198) (0) | 2023.03.11 |
(Python)백준 코딩테스트 연습 - 부분수열의 합(1182) (0) | 2023.03.10 |
(Python)백준 코딩테스트 연습 - 접두사(1141) (0) | 2023.03.09 |