알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 사람의 수(1206)

HRuler 2023. 3. 14. 14:09

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을 곱하는것마저 부동 소수점 연산으로 연산에 오차가 생겨 계속 틀렸다.

 부동 소수점 연산은 항상 주의하도록 해야겠다.