본문 바로가기

알고리즘/백준 문제풀기

BOJ 백준 1793 타일링

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

 

1793번: 타일링

문제 2×n 직사각형을 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 숫자 0 ≤ n ≤ 250이 주어진다.  출력 입력으로 주어지는 각각의 n마다, 2×n 직사각형을 채우는 방법의 수를 출력한다. 예제 입력 1 복사 2 8 12 100 200 예제 출력 1 복사 3 171

www.acmicpc.net

11727 2xN 타일링 2번

https://onecoke.tistory.com/entry/BOJ-%EB%B0%B1%EC%A4%80-11727-2xN-%ED%83%80%EC%9D%BC%EB%A7%81-2

 

문제 풀이)

 

    문제는 11727과 완전히 같지만 출력해주는 부분에서 다르다. 11727 의 경우 % 연산이 들어갔기 때문에 int형 배열에

 

    값들을 저장시킬 수 있지만, 이 문제의 경우 % 연산이 없으므로 일반적인 정수 타입 변수에는 담을 수 없다.

 

    입출력을 모두 string으로 처리하여 해결할 수 있었다.

 

 

    또한 이 문제의 입력을 보면 개수가 정해지지 않은 채 계속 입력되는 형태이다. 이러한 문제는

 

    EOF를 받을 때까지 반복해주면 된다고 한다.

 

    cin을 이용한다면 cin.fail()을 이용해주면 된다.

 

 

소스 코드

#include <iostream>
#include <string>

using namespace std;

const int SIZE = 1010;
int n;
string dp[SIZE];

string Add(string& a, string& b)
{
	string strResult;

	int lenA = a.length();
	int lenB = b.length();
	int len = lenA > lenB ? lenA : lenB;

	int nA[SIZE] = { 0 };
	int nB[SIZE] = { 0 };
	int nResult[SIZE] = { 0 };

	for (int i = 0; i < lenA; ++i) nA[i] = a[lenA - 1 - i] - '0';
	for (int i = 0; i < lenB; ++i) nB[i] = b[lenB - 1 - i] - '0';

	for (int i = 0; i < len; ++i)
	{
		int nTmp = nA[i] + nB[i] + nB[i] + nResult[i];
		nResult[i] = nTmp % 10;
		nResult[i + 1] = nTmp / 10;
	}
	if (nResult[len] != 0) len++;

	for (int i = len - 1; i >= 0; i--)
		strResult += (nResult[i] + '0');
	
	return strResult;
}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	dp[0] = "1";
	dp[1] = "1";
	dp[2] = "3";

	for (int i = 3; i <= 255; ++i)
		dp[i] = Add(dp[i - 1], dp[i - 2]);

	while (true)
	{
		cin >> n;
		if (cin.fail() != false) break;

		cout << dp[n] << endl;
	}

	return 0;
}

'알고리즘 > 백준 문제풀기' 카테고리의 다른 글

BOJ 백준 17136 색종이 붙이기  (0) 2019.09.30
BOJ 백준 11727 2xN 타일링 2  (0) 2019.05.16
BOJ 백준 11726 2xN 타일링  (0) 2019.05.16
BOJ 백준 2573 빙산  (0) 2019.05.11
BOJ 백준 3055 탈출  (0) 2019.05.10