[백준] 곱셈 - Java

2025. 4. 22. 14:20·알고리즘

문제 출처

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

문제

자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.

예제 입력 1 복사

10 11 12

예제 출력 1 복사

4

풀이 방법

  • 간단하게 분할 정복 알고리즘을 이용하여 풀이하였다.
  • A의 B제곱은 아래와 같이, 해당 그림과 같이 나누어 풀이할 수 있다!
    • 그냥 A을 B번 곱하게 되면, 최대 정수형 범위 최대 수 만큼의 곱을 수행하므로 비효율적임(시간초과 가능성)

  • 재귀를 통해, 다음과 같이 함수를 나눈 다음 재귀 끝에서 다시 합을 더해주면 끝.
    • 이 때, 홀수 인 경우가 있는데 홀수인 경우에는 *A를 한번 수행한다( /2 하면 홀수는 1이 잘려나감 )

풀이 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static int A, B, C;
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
        C = Integer.parseInt(st.nextToken());


        System.out.println(powMod(A, B, C));
    }

    public static long powMod(int A, int B, int C){
        if(B == 0){
            return 1;
        }

        long half = powMod(A, B / 2, C);
        long result = (half * half) % C;

        if(B % 2 != 0){
            result = (result * A) % C;
        }
        
        return result;
    }
}

결과

회고

  • 분할정복 이해하기가 좀 어려운데, 관련 문서를 찾아봐야겠다.
저작자표시 비영리 동일조건 (새창열림)

'알고리즘' 카테고리의 다른 글

[백준] 벽 부수고 이동하기 - Java  (1) 2025.04.24
[백준] 불 - Java  (0) 2025.04.23
[백준] 하노이 탑 이동 순서 - Java  (1) 2025.04.21
[백준] 보물섬 - Java  (1) 2025.04.07
[백준] 적록색약 - Java  (0) 2025.04.05
'알고리즘' 카테고리의 다른 글
  • [백준] 벽 부수고 이동하기 - Java
  • [백준] 불 - Java
  • [백준] 하노이 탑 이동 순서 - Java
  • [백준] 보물섬 - Java
BGK97
BGK97
사용자 입장에서 한번 더 생각하는 개발자로 성장하고 싶은 사람입니다.
  • BGK97
    꾸준히, 열심히
    BGK97
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • 알고리즘 (73)
      • 컴퓨터 구조와 운영 체제 (8)
      • 네트워크 (5)
      • React (10)
      • 경험한 에러들 (3)
      • HTML, CSS, JavaScript (8)
      • 자료구조 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BGK97
[백준] 곱셈 - Java
상단으로

티스토리툴바