오늘의 문제는 “3054번 피터팬 프레임”.
영어 문자열을 입력받으면 각 알파벳을 #이나 *을 이용해서 다이아몬드 모양으로 감싸서 출력하면 된다.
예를 들어 DOG를 입력받으면
..#…#….. .#.#.#.#... #.D.#.O..G.* .#.#.#.#... ..#…#…*..
를 출력하면 된다.
처음에는 멋있는 코드를 완성하려다가 그냥 노가다 구현을 하기로 했다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string arr;
int x, y;
cin >> arr;
//1번줄
x = 0;
cout << ".";
for (int i = 1; i <= 4 * arr.size(); i++)
{
if (i % 4 == 2)
{
x++;
if (x % 3 == 0)
{
cout << "*";
}
else
{
cout << "#";
}
}
else
{
cout << ".";
}
}
cout << endl;
//2번줄
cout << ".";
for (int i = 0; i < 2 * arr.size(); i++)
{
switch ((i / 2) % 3)
{
case 0:
case 1:
cout << "#.";
break;
case 2:
cout << "*.";
break;
}
}
cout << endl;
//3번줄
cout << "#";
for (int i = 1; i <= arr.size(); i++)
{
switch (i % 3)
{
case 1:
cout << "." << arr[i - 1] << ".#";
break;
case 2:
cout << "." << arr[i - 1] << ".*";
break;
case 0:
cout << "." << arr[i - 1] << ".*";
break;
}
}
cout << endl;
//4번줄
cout << ".";
for (int i = 0; i < 2 * arr.size(); i++)
{
switch ((i / 2) % 3)
{
case 0:
case 1:
cout << "#.";
break;
case 2:
cout << "*.";
break;
}
}
cout << endl;
//5번줄
x = 0;
cout << ".";
for (int i = 1; i <= 4 * arr.size(); i++)
{
if (i % 4 == 2)
{
x++;
if (x % 3 == 0)
{
cout << "*";
}
else
{
cout << "#";
}
}
else
{
cout << ".";
}
}
cout << endl;
return 0;
}
주어진 예시는 맞췄는데 틀렸다고 한다.
그래서 DOG를 조금 변형해서 테스트 케이스를 돌려본 결과
문자열이 두 글자일때 잘못 작동한다는 것을 알았다.
DO를 입력하면
..#…#.. .#.#.#.#. #.D.#.O.# .#.#.#.#. ..#…#..
를 출력해야 하는데
..#…#.. .#.#.#.#. #.D.#.O.* .#.#.#.#. ..#…#..
를 출력하게 만들었다.
그래서 3번째 줄에 조건문을 달았다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string arr;
int x, y;
cin >> arr;
//1번줄
x = 0;
cout << ".";
for (int i = 1; i <= 4 * arr.size(); i++)
{
if (i % 4 == 2)
{
x++;
if (x % 3 == 0)
{
cout << "*";
}
else
{
cout << "#";
}
}
else
{
cout << ".";
}
}
cout << endl;
//2번줄
cout << ".";
for (int i = 0; i < 2 * arr.size(); i++)
{
switch ((i / 2) % 3)
{
case 0:
case 1:
cout << "#.";
break;
case 2:
cout << "*.";
break;
}
}
cout << endl;
//3번줄
cout << "#";
for (int i = 1; i <= arr.size(); i++)
{
switch (i % 3)
{
case 1:
cout << "." << arr[i - 1] << ".#";
break;
case 2:
if (arr.size() == i)
{
cout << "." << arr[i - 1] << ".#";
}
else
{
cout << "." << arr[i - 1] << ".*";
}
break;
case 0:
cout << "." << arr[i - 1] << ".*";
break;
}
}
cout << endl;
//4번줄
cout << ".";
for (int i = 0; i < 2 * arr.size(); i++)
{
switch ((i / 2) % 3)
{
case 0:
case 1:
cout << "#.";
break;
case 2:
cout << "*.";
break;
}
}
cout << endl;
//5번줄
x = 0;
cout << ".";
for (int i = 1; i <= 4 * arr.size(); i++)
{
if (i % 4 == 2)
{
x++;
if (x % 3 == 0)
{
cout << "*";
}
else
{
cout << "#";
}
}
else
{
cout << ".";
}
}
cout << endl;
return 0;
}