코테/프로그래머스

[프로그래머스/Lv. 2] 3 x n 타일링 (JAVA)

imname1am 2023. 10. 5. 13:49
반응형

🔺 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;
 
class Solution {
    static final int mod = 1_000_000_007;
    
    public int solution(int n) {
        int answer = 0;
        
        long[] dp = new long[5001]; // int형으로 하면 틀림
        dp[0= 1;
        dp[2= 3;
        
        for(int i = 4 ; i <= n ; i += 2) {
             dp[i] = dp[i - 2* 3;        // 일반 모양의 경우의 수
 
             for(int j = i - 4 ; j >= 0 ; j -= 2) {    // 🔔 2가지 특수 모양 추가 처리하기
                 dp[i] += dp[j] * 2;
             }
 
             dp[i] %= mod;
        }
        
        return (int)dp[n];
    }
}
cs

 

 

🧩 해결 아이디어

• DP

- n이 홀수인 경우, 타일을 모두 채울 수 없으므로 dp[n] = 0.

- n이 짝수인 경우, 이전 n이 만들 수 있는 경우의 수 + 특수 모양 만드는 경우의 수를 모두 고려해야 한다.

  1) 이전 n이 만드는 경우의 수   : dp[i] = dp[i-2] * 3; (단, i >= 4 && i += 2)

  2) 특수 모양 만드는 경우의 수 :  dp[i] += dp[j] * 2 (단, j <= i -4 && j -= 2)

 

 

💥 유의사항

- dp 배열을 long형으로 선언해야 한다.

 


🔺 다른 풀이들

- 어랏 이 규칙은.... 내가 못 찾을 것 같다...

dp[n] = dp[n - 2] * 4 - dp[n - 4]
 

프로그래머스 JAVA Level2: 3XN 타일링

문제분석 문제는 아주 심플하다. 가로 2 세로 1인 블록을 3XN타일에 몇개까지 완벽하게 가득 넣을수 있는지 묻는다. 문제 읽자마자 떠오르는게 '규칙찾기' 이다. 혹여나, 규칙을 찾으신분은 별탈

taehoung0102.tistory.com

 

 

- 2중 for문을 만드는 대신 sum 변수를 활용하셨다.

public int tiling(int n) {
    if(n % 2 == 1){
      return 0;
    }
    
    int[] dp = new int [n + 1];
    dp[0] = 1;

    int sum = 0;
    for(int i = 2 ; i <= n ; i += 2){
         dp[i] = (dp[i - 2] * 3 + sum * 2) % 100000;
         sum += dp[i - 2];
    }

    return dp[n];
}

 


💬 느낀 점

특수 모양에서 우짜지.. 하고 점화식 여러개 해보다가 실패해서

다른 분들 코드 보고 참고했다..

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

프로그래머스(3xn 타일링, 가장 먼 노드) - Java

[3xn 타일링] https://programmers.co.kr/learn/courses/30/lessons/12902 코딩테스트 연습 - 3 x n 타일링 programmers.co.kr * 조건 세로의 길이가 3이고 가로의 길이가 n인 바닥이 존재한다 타일을 채울 때, 가로 또는 세

uyoo-story.tistory.com

 

 

[프로그래머스 Level 4] 3 x n 타일링

문제 가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울

cvillain.tistory.com

 

반응형