알고리즘 문제
백준 - Poziome serca (C++)
als982001
2023. 7. 21. 09:46
https://www.acmicpc.net/problem/26772
26772번: Poziome serca
W pierwszym (jedynym) wierszu wejścia znajduje się jedna liczba naturalna N, określająca liczbę serduszek do wypisania. Liczba ta będzie równa co najmniej 1 i co najwyżej 100 000.
www.acmicpc.net
이번 문제는 입력된 숫자만큼 하트를 출력하는 문제이다. 그런데 그냥 출력하는 것이 아니라 가로로(한 행으로) 출력해야 한다. 그래서 재밌어 보여 이 문제를 기록하기로 하였다. 세로로 출력해야 하는 문제라면 단순히 주어진 숫자만큼 반복문을 돌리면 끝이겠지만, 가로로 출력해야 하기에 굉장히 귀찮은 문제이다.
input: 2
@@@ @@@ @@@ @@@
@ @ @ @ @ @ @ @
@ @ @ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @ @ @
@ @
input: 4
@@@ @@@ @@@ @@@ @@@ @@@ @@@ @@@
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @
@ @ @ @ @ @ @ @
@ @ @ @
입력이 2와 4일 때의 출력이다. 하트의 각 행은 단순히 복사/붙여넣기를 통해 출력하면 된다. 그리고 주의해야할 점이 하나 있는데, 하트와 하트 사이에는 한 칸의 공백이 존재한다. 이를 주의하여 출력해야 한다.
#include <iostream>
#pragma warning(disable:4996)
using namespace std;
void Margin(int n, int N)
{
if (n < N - 1)
printf(" ");
}
void PrintHeart(int N)
{
for (int n = 0; n < N; ++n)
{
printf(" @@@ @@@ ");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf("@ @ @ @");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf("@ @ @");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf("@ @");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf(" @ @ ");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf(" @ @ ");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf(" @ @ ");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf(" @ @ ");
Margin(n, N);
}
printf("\n");
for (int n = 0; n < N; ++n)
{
printf(" @ ");
Margin(n, N);
}
printf("\n");
}
int main()
{
ios_base::sync_with_stdio(0);
std::cout.tie(0);
cin.tie(0);
int N;
scanf("%d", &N);
PrintHeart(N);
return 0;
}
여기서 Margin이라는 함수를 통해 하트와 하트 사이에 간격을 하나 주었다. 그런데 Margin 함수를 보면 if (n < N - 1)이라는 조건문이 있다. 마지막 하트의 오른쪽에는 간격을 주지 않기 위해서 조건문을 이용했는데, 이는 이 문제와 비슷한 문제에서 마지막 출력에 간격을 줘서 틀렸던 경험이 있기에 혹시나 하는 마음에 추가한 것이다.