Computer Science/Algorithm Problem

백준] 3054 - 피터팬 프레임(COCI 2006/2007)

TwinParadox 2019. 2. 4. 11:44
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 알파벳 대문자로 이루어진 최대 15글자 단어가 주어진다.




출력

다섯 줄에 걸쳐, 입력으로 주어진 단어를 피터팬 프레임과 웬디 프레임으로 장식한 결과를 출력한다.




소스코드

#include <iostream>
#include <string>
#include <vector> 
using namespace std;
int main(void)
{
	string str;
	int len;
	cin >> str;
	len = str.length();
	vector<string> arr(5);

	arr[0] = "..#..";
	for (int i = 1; i < str.length(); i++)
	{
		if (i % 3 == 2)
			arr[0] += ".*..";
		else
			arr[0] += ".#..";
	}
	arr[4] = arr[0];

	arr[1] = ".#.#.";
	for (int i = 1; i < str.length(); i++)
	{
		if (i % 3 == 2)
			arr[1] += "*.*.";
		else
			arr[1] += "#.#.";
	}
	arr[3] = arr[1];

	arr[2] = "#.";
	arr[2] += str[0];
	arr[2] += ".#";
	for (int i = 1; i < str.length(); i++)
	{
		if (i % 3 == 1)
		{
			arr[2] += ".";
			arr[2] += str[i];
			if (i == str.length() - 1)
				arr[2] += ".#";
			else
				arr[2] += ".*";
		}
		else if (i % 3 == 2)
		{
			arr[2] += ".";
			arr[2] += str[i];
			arr[2] += ".*";
		}
		else
		{
			arr[2] += ".";
			arr[2] += str[i];
			arr[2] += ".#";
		}
	}

	for (int i = 0; i < 5; i++)
		cout << arr[i] << '\n';
}




Tip

이 문제에서 가장 유의해야 할 점은 두 프레임이 겹치는 구간이 존재한다는 점이다. 필자도 이 문제를 풀면서 처음에는 글자 하나 당 프레임 하나씩 적용해서 출력했지만, 문제 조건과 문제 예시를 보면 프레임의 끝과 시작이 한 칸 씩 겹치게 출력해야 한다.



728x90