본문 바로가기
공부 정리/백준

[백준] 자바 13301 타일 장식물

by 경적필패. 2021. 7. 28.
반응형

문제

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

그림에서 타일에 적힌 수는 각 타일의 한 변의 길이를 나타낸다. 타일 장식물을 구성하는 정사각형 타일 한 변의 길이를 안쪽 타일부터 시작하여 차례로 적으면 다음과 같다.

1, 1, 2, 3, 5, 8,... 

지수는 문득 이러한 타일들로 구성되는 큰 직사각형의 둘레가 궁금해졌다. 예를 들어, 처음 다섯 개의 타일이 구성하는 직사각형(위에서 빨간색으로 표시한 직사각형)의 둘레는 26이다.

타일의 개수 N(1 ≤ N ≤ 80)이 주어졌을 때, N개의 타일로 구성된 직사각형의 둘레를 구하는 프로그램을 작성하시오.

입력

표준 입력으로 다음 정보가 주어진다. 입력은 한 줄로 구성되며 이 줄에는 타일의 개수를 나타내는 정수 N(1 ≤ N ≤ 80)이 주어진다. 

출력

표준 출력으로 N 개의 타일이 구성하는 타일 장식물 직사각형의 둘레를 출력한다.

64비트 정수형인 “long long” 자료형을 써야할 수 있음


테스트 케이스

초록색 입력 / 검은색 출력

 

 


접근

피보나치 수열로 커지는 타일이 있는데 문제의 그림처럼 붙였을 때 총둘레를 구하는 문제입니다.

타일이 1개일때, f(x)는 총 둘레

f(1) = 4

타일이 2개 일 때

f(2) = f(1)+2*fibo(2)=6

타일이 3개일 때

f(3) = f(2) +2*fibo(3)=10

계속하다 보면 규칙이 보이게 되어 dp를 적용하니 문제가 풀렸습니다.

f(n) = f(n-1) +2*fibo(n) 


코드

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	 13301 problem
	*/
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		ArrayList<Long> result = new ArrayList<>();
		ArrayList<Long> fibo = new ArrayList<>();
		fibo.add((long) 1);
		fibo.add((long) 1);
		for(int i=2; i<num; i++) {
			fibo.add(fibo.get(i-2)+fibo.get(i-1));
		}
		result.add((long) 4);
		for(int i=1; i<num;i++) {
			result.add(result.get(i-1)+2*fibo.get(i));
		}
		bw.write(String.valueOf(result.get(num-1)));
		
	
		bw.flush();
		bw.close();
	}
	
}

주의

오버플로우가 발생하므로 long타입을 써줘야 합니다.

 

반응형

'공부 정리 > 백준' 카테고리의 다른 글

[백준] 자바 2193 이친수  (0) 2021.07.30
[백준] 자바 9656 돌 게임 2  (0) 2021.07.29
[백준] 자바 2156 포도주 시식  (0) 2021.07.27
[백준] 자바 1912 연속합  (0) 2021.07.26
[백준] 자바 14501 퇴사  (0) 2021.07.23

댓글