본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 4][Python] 4539번 : 반올림

by 빛밤하늘 2021. 6. 6.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

4539번: 반올림

정수 x가 주어졌을 때, 10보다 크다면, 1의 자리에서 반올림하고, 결과가 100보다 크면, 10의 자리에서 반올림하고, 1000보다 크면, 100의 자리에서 반올림하고... 이와 같이 계속 반올림하는 프로그램

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin
# 사사오입 반올림을 사용하기 위해 import합니다.
import decimal

# 사사오입 반올림으로 반올림 모드를 변경합니다.
context = decimal.getcontext()
context.rounding = decimal.ROUND_HALF_UP

# 첫째 줄에 테스트 케이스의 개수 n을 입력합니다.
# 정수형으로 변환합니다.
n = int(stdin.readline())

# 테스트 케이스의 개수 n을 반복합니다.
for test_case_idx in range(n):
    # 정수 x를 입력합니다.
    # 맨 끝의 \n은 빼줍니다.
    # 0 <= x <= 99999999
    x = stdin.readline().rstrip()
    # 정수 x의 길이를 저장하는 변수를 선언합니다.
    x_len = len(x)

    # 반올림할 자릿수를 저장하는 변수를 선언합니다.
    # 일의 자리에서부터 반올림을 하므로 -1로 초기화해줍니다.
    round_position = -1
    # 정수 x의 길이 - 1만큼 반복합니다.
    for cnt in range(x_len - 1):
        # 현재 round_position의 값에 해당하는 자릿수에서 반올림을 하고
        # 문자열로 변환한 뒤 x에 다시 저장해줍니다.
        x = str(round(decimal.Decimal(x), round_position))
        # round_position에 1을 빼줘 반올림할 자릿수를 변경해줍니다.
        round_position -= 1

    # 반올림한 결과를 출력해줍니다.
    print("%d" % decimal.Decimal(x))

결과

 

맞았습니다 결과를 보고나서 다른 사람들의 파이썬 결과를 결과를 보니

대부분 저보다 빠른 실행 시간의 결과를 냈습니다.

 

저는 decimal 모듈을 사용해서 반올림 모드를 변경해서 풀었지만,

다른 사람들은 특정 모듈을 사용해서 편하게 풀기보다는

더 알고리즘적인 생각으로 푼 결과, 빠른 실행 시간을 냈던 것 같습니다.

저도 무작정 모듈을 사용하지 않고 어떻게 풀 수 있는지 더 생각해봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글