[백준]_18291_비요뜨의 징검다리 건너기

18291.png

`divide and conquer


1과 4 사이의 숫자 조합 개수를 출력하는 문제(2의 거듭제곱)

  • 처음에 divide(x/2) * divide(x/2) * (x%2+1) 로 제출하다가 시간초과됨

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class B18291 {
	static int T,N;
	static final long m = 1000000007;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
	    T = Integer.parseInt(br.readLine());
	    
	    for(int tc=0;tc<T;tc++) {
	    	N = Integer.parseInt(br.readLine());
	    	sb.append(N==1?1:divide(N-2)).append("\n");
	    }
	    System.out.println(sb);
	}
	private static long divide(int x) {
		if(x==0) return 1;
		long temp = divide(x/2);
		return temp*temp*(x%2+1)% m;
	}
}
updatedupdated2021-02-262021-02-26
Load Comments?