본문 바로가기

Java/백준

[JAVA] 백준 1904 01타일

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

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net

 

 

 

문제 풀이 

 

- "00"타일과 "1"타일로 만들 수 있는 이진수의 가짓수를 찾는 문제 

- 1타일과 00타일을 이전의 타입의 붙이는 문제이므로 메모이제이션을 이용한 동적계획법으로 풀이 

 

n=1 일때 1

n=2 일때 00,11 

n=3 일때 001,111,100

n=4 일때 0000,1100,0011,1111,1001

n=5 일때 00001,11001,00111,11111,10011,00100,11100,10000

 

- 타일의 가짓수는 피보나치 수열의 패턴을 보임 

- memo[n] = memo[n-1]+memo[n-2]의 점화식을 사용하여 문제를 풀 수 있음

 

- n이 1인 경우 ArrayIndexOutOfBounds 에러 발생하기 때문에 예외 처리 필요 

 

 

정답

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
        int n = Integer.parseInt(br.readLine());
        int memo[] = new int[n+1];
        
        
        memo[1] =1;
        
        if(n>1)
        {
        	memo[2]=2;
        }
        
        for(int i=3; i<=n; i++)
        {
        	memo[i] = memo[i-1]+memo[i-2];
        	memo[i]%=15746;
        }
        
        bw.write(memo[n]+"");
        
        bw.flush();
        bw.close();
   
       
    }
}

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 1912 연속합  (1) 2024.02.26
[JAVA] 백준 9461 파토반 수열  (0) 2024.02.26
[JAVA] 백준 9184 신나는 함수 실행  (0) 2024.02.26
[JAVA] 백준 14889 스타트와 링크  (0) 2024.02.26
[JAVA] 백준 2580 스도쿠  (0) 2024.02.23