본문 바로가기
CS/알고리즘

백준 11726번 : 2*n 타일링

by DYII 2021. 2. 18.
728x90

2 * 1 크기일 경우

 1개

 

2 * 2 크기일 경우

 2개

 

2 * 3 크기일 경우

 3개

 

2 * 4 크기일 경우

 5개

 

이 문제를 해석해보면 결국, 피보나치수열임을 알 수가 있다.

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n  = sc.nextInt();
		int a = 0;
		int b = 1;
		int result = 1;
		int bi = Integer.MAX_VALUE/2;
		for(int i=1;i<n;i++) {
			a = b;
			b = result;
			if( b > bi ) {
				a = a % 10007;
				b = b % 10007;
			}
			result = a + b;
		}
		System.out.println(result%10007);
	}
}

 

전에 풀었던 dyii.tistory.com/4?category=0 이 문제와는 달리, 10007로 나눈 나머지를 출력한다고 나와있다.

 

1000까지 더할 수 있다보니 integer의 범위를 훌쩍 넘겨버리기 때문에, 마지막 결괏값만 나누는 것이 아니라 연산 중간에도 나머지로 출력해줘야 한다.

 

for 문 내내 10007로 나누었더니 너무 느리게 결과가 나와서

특정 숫자를 넘으면 나누어주는 코드를 추가했다.

 

여기에서 주의할 사항으로는 a가 아니라 b가 특정 숫자를 넘도록 해주어야 한다.

 

둘 다 동시에 10007로 나누어야 하기 때문에 a로 크기를 비교하게 되면, b가 값을 초과하게 되는 경우가 생길 수 있기 때문이다.

728x90

'CS > 알고리즘' 카테고리의 다른 글

백준 9095 번 : 1, 2, 3 더하기  (0) 2021.02.23
백준 11727 번 : 2*n 타일링2  (0) 2021.02.23
백준 9625번 : BABBA  (0) 2021.02.18
백준 11721번 : 열 개씩 끊어 출력하기  (0) 2021.02.17
백준 1463번 : 1로 만들기  (0) 2021.02.17