연습문제 3xn타일링
이 문제를 풀면서 프로그래머스에서는 static변수는 정말 유용하지 않구나를 깨달았다. 다른 swea나 백준을 풀때처럼
static변수에 5000까지를 모두 계산해서 넣어둘 생각을 하였는데, 음.. 매번 새로 class를 생성하는지 static의 의미가 전혀 없이 모두 시간초과 가 발생하였다..
그래서 불러올때마다 계산하는 방법으로 코딩하니 통과...마음이 아프다... 나는 무엇을 위해 효율성을 생각했는가.
그림 그려서 차근차근 푸니
f(n) = 3*f(n-2) + 2*f(n-4) + .....+ 2*f(2) +2 라고 생각하면 된다..
아래는 문제 설명이다..
더보기
문제 설명
가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다
- 타일을 가로로 배치 하는 경우
- 타일을 세로로 배치 하는 경우
예를들어서 n이 8인 직사각형은 다음과 같이 채울 수 있습니다.
직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
- 가로의 길이 n은 5,000이하의 자연수 입니다.
- 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.
입출력 예
nresult4 | 11 |
입출력 예 설명
입출력 예 #1
다음과 같이 11가지 방법이 있다.
아래는 풀이한 코드가 된다. 사이즈가 크니. long 배열로 선언해서 해결하면 된다.
더보기
class Solution {
static int mod = 1000000007;
public int solution(int n) {
int answer = 0;
if(n==2)return 3;
if(n==4)return 11;
long[] arr = new long[n+1];
arr[0]=1; arr[2]=3;arr[4]=11;
for(int i = 6;i<=n;i+=2){
arr[i]=arr[i-2]*3;
for(int j = i-4;j>=0; j-=2){
arr[i]+=((arr[j]*2));
}
arr[i]%=mod;
}
return (int)arr[n];
}
}
아무 문제 없는 쉬운문제.. 허허허허허 mod를 조심하고, static을 조심하자...
'코딩테스트 연습 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 ] level 4 - 스티커 모으기(2) - 파이썬 (0) | 2020.06.23 |
---|---|
[ 프로그래머스 ] level 4 - 스티커 모으기(2) ( Java ) (0) | 2020.06.23 |
[ 프로그래머스 ] Level 4 4단 고음 ( Java ) (0) | 2020.06.03 |
[ 프로그래머스 ] Level4 - 지형 이동 (Java : Prim 알고리즘 ) (0) | 2020.06.02 |
[ Programmers ] level 2 - 타겟 넘버 ( python ) (0) | 2020.01.09 |