코딩테스트/프로그래머스 level 3

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

냠냠:) 2020. 4. 1. 19:01

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 설명]

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

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

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

제한 사항

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

입출력 예

N return
5 26
6 42

[풀이]

처음에 피보나치 수열에 이어서 둘레도 규칙이 있을것이라고 생각이 들었다. 직접 몇개 적어보니 4, 6, 10, 16, 26, 42로 둘레들도 X[n] = X[n-1] + X[n-2]의 규칙을 갖고 있었다. 그래서 DP로 쉽게 풀어냈다.

 

[코드]

1
2
3
4
5
6
7
8
9
public long solution(int N) {
        long[] DP = new long[N+1];
        DP[1= 4;
        DP[2= 6;
        for(int i = 3; i <= N; i++) {
            DP[i] = DP[i-1]+DP[i-2];
        }
        return DP[N];
    }
cs

프로그래머스 테스트 케이스 통과

느낀 점 : 처음에 int형 배열로 DP를 만들었는데 효율성테스트에서 통과하지 못해서 long형으로 바꿔줬다.. 이유는 아직 잘모르지만 찾아봐야겠다.

 

**피드백은 언제나 환영입니다!!

반응형