• Home
  • About
    • JOOS photo

      JOOS

      Joos's blog

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

[백준] 11726번 : 2×n 타일링 with python3

19 Aug 2018

Reading time ~1 minute

문제 : https://www.acmicpc.net/problem/11726

목표:

  • 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력

조건:

  • 1 ≤ n ≤ 1,000
  • O(N**3)가능

solution 설명 :

  • 세로의 값이 1일 때 경우의 수는 가로하나로 서있는 것): 1개 -> d[1]
  • 세로의 값이 2일 때 1에서 온 것 한개 눕혀져 있는 가로두개: 1개 -> d[2]
    • 이건 추가되는 경우의 수를 말하는 것이다.
    • d[1]에서 가로로 서있는 것 하나 가져오기 때문에 d[2]의 값은 2 이다.
  • 세로의 값이 3일 때 d[1]과 d[2]에서 가져와서 하나씩 붙이는 것이다.
  • 세로의 값이 4일 때 d[3]과 d[2]에서 만들어진다.
  • 계속간다.
N = int(input())
d = [0] * (N+1)

d[0] = 1
d[1] = 1

for i in range(2, N+1):
  d[i] = d[i-1] + d[i-2]

print(d[N]% 10007)

import java.util.Scanner;
public class Main {
	static Scanner s = new Scanner(System.in);
	public static void main(String[] args) {
		int n = s.nextInt(), a=1, b=1, c;
		for(int i=1;i<n;i++) {
			c = a+b;a = b%10007;b = c%10007;
		}
		System.out.println(b);
	}
}



algorithm백준 Share Tweet +1