happy318
팽도리블로그
happy318
전체 방문자
오늘
어제
  • 전체글 (252)
    • 공부 (5)
      • Algorithm 정리 (0)
      • 논문리뷰 (1)
      • C++ (2)
      • Python (2)
      • Java (0)
      • Back-end (0)
      • Front-end (0)
      • Embedded (0)
    • 코딩테스트 (218)
      • Python 문제풀이 (100)
      • C++ 문제풀이 (108)
      • Python template (9)
      • C++ template (1)
    • 일상 (20)
      • 맛집 (13)
      • 쇼핑 (5)
      • 아무 일상 (2)
    • 게임 (9)
      • 메이플스토리 (9)

최근 글

인기 글

hELLO · Designed By 정상우.
happy318

팽도리블로그

코딩테스트/Python 문제풀이

[백준] 곱셈

2022. 6. 24. 02:57

https://www.acmicpc.net/problem/1629

 

1629번: 곱셈

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.

www.acmicpc.net

분할정복을 이용하는 문제입니다. 

 

문제부터 요약하면, A, B, C 가 주어질 때, A를 B번 곱한 수를 C로 나눈 나머지를 출력해야 합니다. 

 

<Solution>

예전에 

https://life318.tistory.com/22

 

[백준] 이항 계수 3(페르마 소정리, modular inverse, 분할정복)

https://www.acmicpc.net/problem/11401 11401번: 이항 계수 3 자연수 \(N\)과 정수 \(K\)가 주어졌을 때 이항 계수 \(\binom{N}{K}\)를 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. www.acmicp..

life318.tistory.com

위의 문제를 해결하는 중 분할정복하여 거듭제곱을 구하는 함수를 만들어 두었기에 그대로 활용하여 해결하였습니다.

 

실제 구현은 아래와 같습니다.

import sys

A, B, C = list(map(int, sys.stdin.readline().rstrip().split()))

def exp(base: int, expo: int) -> int:
    if expo == 1:
        return base % C
    a = exp(base, expo//2)
    b = expo%2
    # print(f'a,b = {a,b}')
    return a*a*(base**b) %C

print(exp(A,B))
반응형

'코딩테스트 > Python 문제풀이' 카테고리의 다른 글

[백준] 웜홀  (0) 2022.06.25
[백준] 최단경로  (0) 2022.06.24
[백준] 특정한 최단 경로  (0) 2022.06.24
[백준] 파티  (0) 2022.06.23
[백준] 트리의 지름  (0) 2022.06.23
    '코딩테스트/Python 문제풀이' 카테고리의 다른 글
    • [백준] 웜홀
    • [백준] 최단경로
    • [백준] 특정한 최단 경로
    • [백준] 파티
    happy318
    happy318

    티스토리툴바