https://www.acmicpc.net/problem/1793
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 |