프로그래머스의 타일 장식물(Lv3) 문제이다.


[ 문제풀이 ]

간단하게 그림을 보면서 규칙을 한번 알아보자. 우리가 정답으로 구해야 하는 값은 N개의 타일로 구성된 직사각형의 둘레이지만,

우리가 지금부터 규칙으로 알아볼 것은 가로와 세로의 길이만 알아볼 것이다.

N개의 타일로 구성된 직사각형의 가로와 세로의 길이를 안다면 둘레를 구하는 것은 일도 아니기 때문이다.

그럼 지금부터 규칙을 한번 찾아보자.

가장 처음에 N = 1일 경우를 보자. N = 1이라는 것은, '1개의 타일로 구성된 직사각형'을 의미한다. 다음과 같은 형태일 것이다.

.

N = 2일 경우를 보자. 문제에 주어진 그림처럼 다음과 같은 형태로 생겼다는 것을 알 수 있다.

.

지금부터 { 가로 , 세로 } 로 값을 한번씩 채워가면서 진행해보겠다.

N = 1 { 1, 1 }

N = 2 { 1, 2 }

이 후, N = 3일 경우도 확인해보자.

.

N = 3 { 3, 2 }

N = 4일 경우를 확인해보자.

.

N = 4 { 3, 5 }

여기 까지만 하고 규칙을 한번 찾아보자. 지금까지 위에서 구한 { 가로 , 세로 } 를 쭉 나열해보면 다음과 같다.

{ 1 , 1 }

{ 1 , 2 }

{ 3 , 2 }

{ 3 , 5 }

본인은 여기서 규칙을 찾았다. 현재 'x개'의 타일로 구성된 직사각형의 { 가로 , 세로 } 가 { a , b } 라고 가정하면,

x + 1 개의 타일로 구성된 직사각형의 { 가로 , 세로 } 는 { a , a + b } or { a + b , b } 둘 중 하나의 값이라는 것이다.

위의 구한 값들을 토대로 위의 규칙을 한번 확인해보자

N = 1 일 때, { 1 , 1 } 이었다. N = 2 일 경우를 보면 { 1 , 1 + 1 }  or { 1 + 1 , 1 } 둘 중 하나의 값이었다.

실제로 N = 2일 때는 { 1 , 2 } 였다.

즉, N = 1에서 N = 2로 갈 때는 "세로 길이에 이전 직사각형의 가로 + 세로 길이가 적용" 되었다고 볼 수 있다.

N = 2 일 때는 { 1, 2 } 였다. N = 3 일 경우를 보면 { 1 , 1 + 2 } or { 1 + 2 , 2 } 둘 중 하나의 값이었다.

실제로 N = 3일 때는 { 3 , 2 } 였다.

즉, N = 2에서 N = 3으로 갈 때는, "가로 길이에 이전 직사각형의 가로 + 세로 길이가 적용" 되었다고 볼 수 있다.

여기서 또 하나의 규칙을 발견할 수 있다. 바로, "가로 + 세로"가 적용되는 변이, 한 번은 가로에, 한 번은 세로에 적용된다는

것이다.

처음 N = 1에서 N = 2로 갈 때는, "가로 + 세로"의 값이 N = 2의 '세로길이' 에 적용되었었다.

N = 2에서 N = 3으로 갈 때는, "가로 + 세로"의 값인 N = 3의 '가로길이' 에 적용되었다.

즉 ! 위에서 말한 "가로 + 세로"의 값인 세로 , 가로 에 번갈아 가면서 적용된다는 것이다.

이 규칙을 토대로 문제를 해결하였다.


[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <string>
#include <vector>
 
using namespace std;
 
long long solution(int N)
{
    long long answer = 0;
    long long garo = 1;
    long long sero = 1;
    char C = 'S';
 
    for (int i = 2; i <= N; i++)
    {
        if (C == 'S')
        {
            sero = sero + garo;
            C = 'G';
        }
        else
        {
            garo = garo + sero;
            C = 'S';
        }
 
    }
    answer = (garo * 2+ (sero * 2);
    return answer;
}
cs








+ Recent posts