관리 메뉴

솜씨좋은장씨

[BaekJoon] 2052번 : 지수연산 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 2052번 : 지수연산 (Python)

솜씨좋은장씨 2022. 4. 29. 11:29
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 지수연산 입니다.

 

2052번: 지수연산

자연수 N(1 ≤ N ≤ 250)이 주어졌을 때, 2의 -N승을 계산하는 프로그램을 작성하시오. 즉, 1/(2N)을 계산하는 것이다.

www.acmicpc.net

👨🏻‍💻 문제 풀이

그저 1 / 2^N 의 값을 구하면 되는 문제여서 오! 엄청 쉽네! 라고 생각했다가 

가차없이 틀렸습니다! 를 보고 아! 하고 오랜만에 무언가 깨닫게 된 문제였습니다.

바로 소수점 표시 입니다!

1 / pow(2, 250)

1 / 32 와 같은 값은 크게 문제가 되지 않지만 위와 같이 1 / 2^250 과 같은 값은 

소수점이 너무 길어져서

5.527147875260445e-76

위와 같이 e와 - 를 활용하여 표현하게 됩니다.

 

하지만! 이 문제에서 우리가 원하는 것은! 소수 아래 모든 자리수를 구하는 것이었습니다.

 

이를 해결하는 방법은 2가지가 있습니다.

 

바로 % 를 활용하는 방법과 {}.format을 활용하는 방법입니다.

 

👨🏻‍💻 % 를 활용하는 방법

"%.300f" % (1 / pow(2, N))

👨🏻‍💻 {}.format() 을 활용하는 방법

"{:.300f}".format(1 / pow(2, N))

이 방법을 활용하여 문제를 풀었습니다.

 

또 이 문제에서는 뒤에 0을 붙이지 않는다고 되어있습니다.

0을 지우는 것은 뒤에서부터 0이 아닌 숫자가 나올떄까지 반복문을 돌면서 인덱스를 찾고

해당 인덱스로 문자열을 slicing 하는 방식으로 진행했습니다.

slice_idx = len(answer)
    
for idx in range(len(answer)-1, 1, -1):
    if answer[idx] != '0':
        slice_idx = idx + 1
        break

👨🏻‍💻 코드 ( Solution )

def exponentiation(N):
    answer = "%.300f" % (1 / pow(2, N))
    
#     answer = "{:.300f}".format((1 / pow(2, N))
    
    slice_idx = len(answer)
    
    for idx in range(len(answer)-1, 1, -1):
        if answer[idx] != '0':
            slice_idx = idx + 1
            break
    
    return answer[:slice_idx]

if __name__ == "__main__":
    N = int(input())
    print(exponentiation(N))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments