[level 2] 2 x n 타일링 - 12900

2024. 9. 22. 17:26·코딩테스트/프로그래머스

[level 2] 2 x n 타일링 - 12900

문제 링크

성능 요약

메모리: 52.2 MB, 시간: 1.50 ms

구분

코딩테스트 연습 > 연습문제

채점결과

정확성: 70.0
효율성: 30.0
합계: 100.0 / 100.0

제출 일자

2024년 09월 22일 17:01:06

문제 설명

가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다.

  • 타일을 가로로 배치 하는 경우
  • 타일을 세로로 배치 하는 경우

예를들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다.

Imgur

직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.

제한사항
  • 가로의 길이 n은 60,000이하의 자연수 입니다.
  • 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.

입출력 예
n result
4 5
입출력 예 설명

입출력 예 #1
다음과 같이 5가지 방법이 있다.

ImgurImgurImgurImgurImgur

 

기존에 생각했던 해결 방법

class Solution {
    public int solution(int n) {
        return tile(n);
    }

    int tile(int n){
        if(n == 1) return 1;
        if(n == 2) return 2;
        return (tile(n-1)+tile(n-2))%1000000007;
    }
}

 

 

 

재귀로 접근하였을 때 시간 복잡도는 O(2^n)로

중복 계산으로 인해 n이 증가할수록 계산 시간이 기하급수적으로 증가하여 시간초과로 문제를 해결하지 못하였다.

 

해결 방법

DP 방식 적용

시간 복잡도를 O(n)으로 단축시킬 수 있으며, 단순 계산으로 n이 50일때 DP 방식은 50번의 계산만 수행하지만, 재귀 방식은 수백만 번의 함수호출이 필요하다.

class Solution {
    public int solution(int n) {
        
        int[] arr = new int[n+1];
        
        arr[1] = 1;
        arr[2] = 2;
        
        for(int i=3; i<=n; i++){
            arr[i] = (arr[i-1] + arr[i-2]) % 1000000007 ;
        }
        return arr[n];
        
    }
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[level 2] [3차] n진수 게임 - 17687  (0) 2024.09.26
[level 2] 튜플 - 64065  (0) 2024.09.22
[level 2] [1차] 캐시 - 17680  (3) 2024.09.20
[level 2] n^2 배열 자르기 - 87390  (0) 2024.09.15
[level 2] 할인 행사 - 131127  (1) 2024.09.15
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [level 2] [3차] n진수 게임 - 17687
  • [level 2] 튜플 - 64065
  • [level 2] [1차] 캐시 - 17680
  • [level 2] n^2 배열 자르기 - 87390
mint723dev
mint723dev
mint723dev 님의 블로그 입니다.
  • mint723dev
    mint723dev 님의 블로그
    mint723dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • Computer Science (16)
        • Computer Architecture (0)
        • Data Structure (2)
        • Database (4)
        • Network (4)
        • Operating System (6)
        • Software Engineering (0)
      • Java (6)
      • 자료 구조 (0)
      • 코딩테스트 (62)
        • LeetCode (1)
        • 프로그래머스 (29)
        • 백준 (32)
      • Spring (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    BFS
    DP
    탐욕법
    JVM
    티스토리챌린지
    deque
    DFS
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mint723dev
[level 2] 2 x n 타일링 - 12900
상단으로

티스토리툴바