본문 바로가기

Archived(CSE Programming)/알고리즘(C++)

프로그래머스_타일 장식물

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

 

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

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

programmers.co.kr

간단한 DP 문제였다.

다음 타일의 크기를 구하는 과정은 피보나치 수열이었고,

전체 둘레를 구하는 과정은 타일이 그려지는 패턴을 보고 직관으로 파악하였다.

#include <string>
#include <vector>

using namespace std;

long long solution(int N) {
    long long answer = 0;
    vector<long long> v(N+1);
    
    // 1~n까지 반복
    v[1]=1,v[2]=1; // 초기화
    for(int i=3;i<=N;i++){
        v[i] = v[i-1]+v[i-2]; // DP
    }
    
    // 둘레 계산 (N 번째 정사각형 둘레 + N-1번째 정사각형의 둘레 반)
    answer += ((4 * v[N]) + (2*v[N-1])) ;
    
    return answer;
}