백준) 2 x n 타일링 (재귀함수) / JAVA

2020. 4. 17. 03:54·🖥️ 컴퓨터공학 🖥️/알고리즘
반응형

문제 출처입니다.

https://www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

 

사고의 흐름

2x1 타일링을 할 때부터 차례대로 하여 규칙을 찾아내보록 한다.

그 결과, 2x1일때는 1, 2x2 일때는 2, 2x3 일때는 3, 2x4 일때는 5, 2x5 일대는 8이라는 결과가 나온다. 그런데 2x5 타일링을 분석하면 다음 그림과 같다.

 

↑↑↑↑  2x3 타일리에 가로 타일 2개를 붙여 2x5 타일링을 완성한 경우

 

↑↑↑↑  2x4 타일리에 세로 타일 1개를 붙여 2x5 타일링을 완성한 경우

즉, 5번째 타일링은 3번째와 4번째 타일링을 더한 값이다. 즉 피보나치 수열로 나타낼 수가 있다. 

 

해결방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package backjoon;
import java.util.*;
 
public class Beak11726{
 
    public static void main(String[]args){
        Scanner scan=new Scanner(System.in);
        System.out.println("n을 입력하세요 n :");
        int n=scan.nextInt();//몇 번째 타일링 개수를 구할 것인지 입력
        int []d=new int[n+1];
 
        d[1]=1;
        if(n>=2) 
        d[2]=2;
        //첫 번째와 두 번째는 피보나치 수열로 만들 수 있는 결과가 아니므로 기본값으로 설정
 
        for(int i=3;i<=n;i++){
            d[i]=d[i-1]+d[i-2]%10007;
        }
        //재귀함수를 이용해서 n=5 일때를 구할경우 d[3]과 d[4]를 순서대로 구한뒤 그 합을 d[5]에 대입. 
 
        System.out.println("2 x n 크기의 직사각형을 채우는 방법의 수 :"+d[n]);
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

결과

의견

매우 쉬운 문제이지만 사소한 부분에 발을 걸려 문제를 풀지 못하였다.

 

동그라미를 친 부분이 헷갈렸던 부분인데 

첫 번째 부분에서 왜 n+1인지 궁금하였다. 

1) n+1대신 1000이라는 넉넉한 숫자를 넣었을 경우

성립

2) n+1 대신 n을 넣었을 경우

예외 발생

>> 즉, 배열을 생성할 땐 배열의 크기를 넉넉하게 하는 것이 도움이 된다!

 

그리고 두 번째 부분이다. 

조금 헷갈리긴 하였지만 당연한 단계였으며 이 부분은 재귀함수가 익숙해지면 극복할 수 있을 것 같다.

728x90
반응형

'🖥️ 컴퓨터공학 🖥️ > 알고리즘' 카테고리의 다른 글

[acmicpc] 두더지 굴 (feat. 깊이우선탐색 알고리즘) / C++  (0) 2020.06.09
[acmicpc] upper bound (feat. 이진 검색 알고리즘) / C++  (0) 2020.06.08
백준) - 1로 만들기(재귀함수) / C++  (0) 2020.04.13
백준) - 1로 만들기 (재귀함수) / JAVA  (0) 2020.04.13
프로그래머스) - 더 맵게 (우선순위 큐)  (0) 2020.04.04
'🖥️ 컴퓨터공학 🖥️/알고리즘' 카테고리의 다른 글
  • [acmicpc] 두더지 굴 (feat. 깊이우선탐색 알고리즘) / C++
  • [acmicpc] upper bound (feat. 이진 검색 알고리즘) / C++
  • 백준) - 1로 만들기(재귀함수) / C++
  • 백준) - 1로 만들기 (재귀함수) / JAVA
공대생 배기웅
공대생 배기웅
군노답 미필 공대생 배기웅의 대학생활을 갈아 넣은 블로그
    반응형
  • 공대생 배기웅
    글쓰는공대생의 IT블로그
    공대생 배기웅
  • 전체
    오늘
    어제
    • 분류 전체보기 (166)
      • 🖊️ 공대생 글쓰기 🖊️ (17)
        • 공대생 회고록 (4)
        • 공대생의 끄적끄적 (4)
        • 슬기로운 공대생활 (9)
        • 사회초년생의 업무일기 (0)
      • 📈 산업공학 📈 (14)
        • 금융, 파생상품 (13)
        • 통계 (0)
        • 재무회계 (1)
      • 🖥️ 컴퓨터공학 🖥️ (92)
        • 머신러닝, 딥러닝 (12)
        • 텐서플로우, 케라스 (1)
        • 알고리즘 (24)
        • 웹 (5)
        • Python (3)
        • C | C++ (23)
        • Java (15)
        • 코드 에러 모음집 (9)
      • 😙 취미, 교양 😙 (2)
        • 영어공부 (1)
        • 일본어회화 공부 (1)
      • 🔍 정보 공유 🔍 (38)
        • 대학생 외부활동 정보 (2)
        • 개발자관련 정보 (3)
        • 대입 논술 입시자료 정보 (22)
        • 프로그램 세팅 (11)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • [공지] 글쓰는 공대생입니다 😃
  • 인기 글

  • 태그

    조작자
    재귀함수
    무작위 변수
    이클립스
    프랜드함수
    예외
    알고리즘
    자바
    데이터베이스
    경제성공학
    스캐너
    acmicpc
    객체지향
    OOP
    equals프레임워크
    백준
    C++
    프로그래머스
    Operator
    Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
공대생 배기웅
백준) 2 x n 타일링 (재귀함수) / JAVA
상단으로

티스토리툴바