코드굽는 타자기

SWEA[7965] - 퀴즈[D4] 본문

알고리즘/이분탐색

SWEA[7965] - 퀴즈[D4]

bright-jun 2020. 2. 18. 15:06

링크

SWEA[7965]

문제설명

  • 분할정복

문제풀이

  • 분할정복 + 범위초과 검사

문제코드

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;

public class Solution7965 {

    public static long dcPower(long x, long n) {
        if(n==0)return 1;
        if(n==1)return x%1000000007;
        long result = dcPower(x,n>>1)%1000000007;
        if(n%2==0) {
            return (result*result)%1000000007;
        }else {
            return ((result*result)%1000000007)*x%1000000007;
        }
    }

    public static void main(String[] args) throws NumberFormatException, IOException {
        System.setIn(new FileInputStream("res/swea/7965.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T=Integer.parseInt(br.readLine());
        for (int test_case = 1; test_case <= T; test_case++) {
            int N = Integer.parseInt(br.readLine());
            long ans = 0;
            for (int i = 1; i <= N; i++) {
                ans+=(dcPower(i%1000000007, i)%1000000007);
                ans%=1000000007;
            }
            System.out.println("#"+test_case+" "+ans);
            /*
             * 초기화
             */
        }//end test_case
    }//end main
}//end class

아쉬운점

  • long 범위 초과하는 모든 경우에 %연산 해줘야함
    • result*result 에도 mod 해줘야함

잘한점

  • pow함수를 분할정복으로 함.
    • 시간초과 방지

'알고리즘 > 이분탐색' 카테고리의 다른 글

SWEA[5607] - 조합[D3]  (0) 2020.04.02
Jungol[1335] - 색종이 만들기  (0) 2020.02.18
JUNGOL[3517] - 이진탐색(Binary Search-이진검색)  (0) 2020.02.07
Comments