본문 바로가기

알고리즘 · 코딩

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

문제 설명

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

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

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

 

제한 사항

  • N은 1 이상 80 이하인 자연수이다.

C++ 풀이

#include <string>
#include <vector>

using namespace std;

long long solution(int N) {
	long long tiles[81];
	tiles[0] = 0;
	tiles[1] = 1;
	tiles[2] = 1;
	if (N == 1)
		return 4;
	else if (N == 2)
		return 6;
	else {
		for (int i = 3; i <= N; i++) {
			tiles[i] = tiles[i - 1] + tiles[i - 2];
		}
		return 4 * tiles[N] + 2 * tiles[N - 1];
	}
}

N번째 타일의 한 변 길이는 N-1타일, N-2타일의 한 변 길이의 합과 같다.

이미 알고 있는 첫 번째, 두 번째 타일의 한 변 길이만 저장한 이후에는 동적 계획법으로 간단하게 풀 수 있다.

 

주의해야 할 점은 타일의 개수가 80개까지 문제로 주어질 수 있기 때문에 벡터나 배열을 사용할 시, 타입을 long long으로 해주어야 시간 초과 및 복잡도 오류가 나지 않는다.

 

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/43104

 

코딩테스트 연습 - 타일 장식물 | 프로그래머스

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

programmers.co.kr

 

 

LIST

'알고리즘 · 코딩' 카테고리의 다른 글

[백준 2839번] 설탕 배달  (0) 2019.08.18
[백준 2798번] 블랙잭  (0) 2019.08.18
[백준 9095번] 1, 2, 3 더하기  (0) 2019.08.11
코딩 테스트 문제 소스 코드  (0) 2019.08.10
[SWEA 1945] 간단한 소인수분해  (0) 2019.08.10