[백준,BOJ 2133] 타일 채우기( JAVA 구현)

2019. 12. 2. 14:40·CodingTest/백준 온라인 저지(BOJ)
반응형

-내 생각 및 해법

  이 문제 역시 타일 채우기 문제로, 예전에 유튜브 강의를 통해 접해 봤던 문제였다. 각 n의 경우에 따라서 타일의 모양을 그려보면 2x1, 1x2크기의 타일밖에 존재하지 않기 때문에 3xN크기의 타일을 채울 때, n이 1, 3, 5... 등 홀수의 경우에는 채울 수 없다는 것을 알 수 있다. 또한 n이 2일 때는 3개, 4일 때는 2의 경우의 수에서 새로운 모양 2가지가 등장해 총 11가지의 수가 등장한다. 이러한 새로운 모양은 n이 짝수로 증가할 때마다 2가지씩 새로운 모양이 등장하기 때문에 점화식을 세워보면, 

dp [n] = dp [n-2] * 3 + dp [n-4] *2 + dp [n-6] * 2.... 식으로 증가하게 된다. 

 

  이 때 주의하지 못했던 점이 있는데 바로 n이 0일 경우는 아무것도 채우지 않는 경우가 되는데, 이 경우 또한, 1로 생각해주어야 한다. 왜냐하면 위의 공식대로 n이 4일 경우를 계산해보면, dp [4] = dp [2] *3 + dp [0] *2가 되는데, 0을 고려하지 않아 버리면, dp [4]는 9가 될 것이다. 이는 2의 경우의수로 4만큼의 타일을 채웠을 경우밖에 되지 않기 때문에 새롭게 생긴 두 가지 모양이 반영되지 않는다는 것을 알 수 있다. 

 

import java.util.*;
import java.math.*;
public class Main {
	
	static int dp[] ;
	
	public static void main(String[] args)   {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		dp = new int[31];
		dp[0] =1; // 0일 때 1을 고려해준다.
		dp[1] = 0;
		if(n>1)
			dp[2] = 3;
		
		for(int i=4;i<=n;i+=2) { // 4부터 2씩 증가반복
			dp[i] = 3*dp[i-2]; // i-2번째 dp값 *3
			for(int j=0;j<i-2;j+=2) { // 0부터 i-2번 째 수보다 작은 경우 반복
				dp[i]+=dp[j] * 2; // 위에 dp[i-2] *3 한 값에 계속해서 더해준다.
			}
		}
		
		System.out.println(dp[n]);
	
				
		
		
			
	}
	
}

 

저작자표시 (새창열림)
'CodingTest/백준 온라인 저지(BOJ)' 카테고리의 다른 글
  • [백준,BOJ 2011] 암호코드( JAVA 구현)
  • [백준,BOJ 2225] 합분해( JAVA 구현)
  • [백준,BOJ 1699] 제곱수의 합( JAVA 구현)
  • [백준,BOJ 11055] 가장 큰 증가 부분 수열( JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Easy
    자바
    백준7576
    프로그래머스
    boj2108
    next 14
    백준1260
    백준
    백준1427
    백준2751
    TypeScript
    meidum
    Java
    BOJ
    백준7576자바
    leetcode 2236
    알고리즘
    component-scan
    boj1427
    medium
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[백준,BOJ 2133] 타일 채우기( JAVA 구현)
상단으로

티스토리툴바