본문 바로가기
알고리즘 문제/Java

[프로그래머스/Java] 3 x n 타일링

by 현장 2026. 5. 11.

-Code

class Solution {
    static int MOD = 1_000_000_007;

    public int solution(int n) {
        // 홀수의 경우 채울수 없어서 0반환
        if (n % 2 == 1) return 0;
        // 이전 2개의 값을 저장
        long prev = 0, answer = 3;
        for (int i = 4; i <= n; i += 2) {
            // (최근 계산 값 * 3) + (최근 계산 이전 값의 합 * 2)  + 2(새로 생긴 패턴)
            long temp = (answer * 3 + prev * 2 + 2) % MOD;
            // 존재하는 값으로 변경
            prev = (prev + answer) % MOD;
            answer = temp;
        }
        return (int) answer;
    }
}

처음에  2 * n 타일링 푼거 처럼 계산을 하는데 홀수 부분에서도 값이 존재하는 줄알고 짜다가 이상해서 찾아보니 홀수의 크기인 부분에서는 전부 체우지 못해서 0으로 계산해야 했습니다.

이걸 알게되어 다시 수식을 찾으니 최근 계산 값 * 3 + 2인줄 알고 작성했으나 틀려서 이유를 찾아보니 6의 계산값이 틀렸고 최종 수식이 (최근 계산 값 * 3) + (최근 계산 이전 값의 합 * 2)  + 2(새로 생긴 패턴) 이었고 이를 통해 해결했습니다.