본문 바로가기
Problem Solving/Programmers

[프로그래머스] 타일 장식물

by 테리는당근을좋아해 2020. 3. 22.

문제설명

문제 설명

대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개의 나선 모양처럼 점점 큰 타일을 붙인 형태였다. 타일 장식물의 일부를 그리면 다음과 같다.

그림에서 타일에 적힌 수는 각 타일의 한 변의 길이를 나타낸다. 타일 장식물을 구성하는 정사각형 타일 한 변의 길이를 안쪽 타일부터 시작하여 차례로 적으면 다음과 같다.
[1, 1, 2, 3, 5, 8, .]
지수는 문득 이러한 타일들로 구성되는 큰 직사각형의 둘레가 궁금해졌다. 예를 들어, 처음 다섯 개의 타일이 구성하는 직사각형(위에서 빨간색으로 표시한 직사각형)의 둘레는 26이다.

타일의 개수 N이 주어질 때, N개의 타일로 구성된 직사각형의 둘레를 return 하도록 solution 함수를 작성하시오.

 

해결 방법

동적 계획법(DP, Dynamic Programming)으로 해결할 수 있는 문제로

 

백준, SWEA의 파도반 수열과 비슷하고, 피보나치 수열과 같은 문제다.

 

https://dheldh77.tistory.com/195

 

[SWEA] 3376. 파도반 수열

문제 아래 그림과 같이 삼각형이 나선모양으로 늘어서 있는 형태를 생각해보자. 아래 그림과 같이 삼각형이 나선모양으로 늘어서 있는 처음에 이 나선은 한 변의 길이가 1인 정삼각형에서 시작한다. 그리고 현재..

dheldh77.tistory.com

https://dheldh77.tistory.com/92

 

[백준] 9461번 - 파도반 수열

문제 > 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라..

dheldh77.tistory.com

 

i번째 사각형의 한 변의 크기는 i-1번째, i-2번째 사각형의 한 변의 크기의 합과 같다.

 

i번째 사각형의 한 변의 크기를 구하는 점화식을 세우면 아래와 같다.

 

D[n] = D[n-1] + D[n-2]

 

JAVA

package programmers;

import java.io.*;
import java.util.Scanner;

public class p_43104 {
	public static long solution(int n) {
		long answer = 0;
		long[] dp = new long[81];
		dp[1] = 1;
		dp[2] = 1;
		
		for(int i = 3; i <= n; i++) {
			dp[i] = dp[i-1] + dp[i-2];
		}
		
		answer = 2 * (dp[n] + dp[n-1]) + 2 * (dp[n-1] + dp[n-2]);
		
		return answer;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		long result = solution(n);
		System.out.println(result);
	}
}

 

댓글