백준 - 11726번 - 2×n 타일링

이상훈·2023년 3월 28일
0

11726번

import java.math.BigInteger;
import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(bf.readLine());
		BigInteger temp = new BigInteger("0");
		BigInteger result = new BigInteger("0");
		BigInteger newResult = new BigInteger("1");
		BigInteger per = new BigInteger("10007");

//		long temp = 0;
//		long result = 0;
//		long newResult = 1;
		for (int i = 1; i<=num; i++) {
			temp = newResult;
			newResult = result.add(newResult);
			result = temp;

		}

		System.out.println(newResult.remainder(per));
	}
}

key

  • 구하려는 num은 (num-2) + (num-1) 으로 구할 수 있다.

  • 변수 세게를 만들어 더해주는 로직을 짰는데 당연히 int와 long범위를 초과했다.

그래서 더 큰 bigInteger을 쓰자는 결론으로 문제를 풀었다.

  • 다 구해놓고 10007로 나눈 나머지를 구하려해서 계속 숫자가 초과 되었다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] dp = new int[1001];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++)
            dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;

        System.out.println(dp[n]);

    }
}

하지만 1001개짜리 배열을 생성하고 배열선언할때마다 10007로 나눈 나머지로 저장하면 숫자가 초과할 일이 없다.

0개의 댓글