파게로그

[백준 1904번] 01타일 본문

콤퓨타 왕왕기초/PS

[백준 1904번] 01타일

파게 2020. 11. 28. 05:25

문제 링크: 1904번 제목

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

 

n은 길이이므로, 1자리가 더 길면 a[n-1]의 원소마다 '1'을 붙일 수 있고, 2자리가 더 길면 a[n-2]의 원소마다 '00'을 붙일 수 있다. a[n-2]에서는 '1'을 붙이는 것을 고려할 필요가 없는데, a[n-1]의 원소에 '1'을 붙인 것과 중복되는 결과이기 때문이다.

따라서 a[n]을 '00'과 '1' 타일로 만들 수 있는 2진 수열의 개수라고 할 때, 점화식은 다음과 같다.

 

a[n] = a[n-1] + a[n-2]

 

다만 숫자가 굉장히 크니 문제에서 제시된 15746으로 계속해서 나누어주면서 계산하는 편이 좋다.

 

import java.util.Scanner;

public class Main {
    public static int tile(int n) {
        int[] arr = new int[1000001];
        arr[1] = 1;
        arr[2] = 2;
        for (int i = 3; i <= n; i++) {
            arr[i] = (arr[i-1] + arr[i-2]) % 15746;
        }
        return arr[n];
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(tile(n));
        sc.close();
    }
}

 

'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글

[백준 1149번] RGB거리  (0) 2020.12.01
[백준 9461번] 파도반 수열  (0) 2020.11.28
[백준 2580번] 스도쿠  (0) 2020.11.28
[프로그래머스 Lv.2] 주식가격  (0) 2020.11.26
[백준 9997번] 폰트  (0) 2020.11.24
Comments