본문 바로가기
알고리즘 문제풀이/백준

[백준 16505] 별

by m2162003 2020. 12. 12.

www.acmicpc.net/problem/16505

 

16505번: 별

출력 예제를 보고 별 찍는 규칙을 유추하여 별을 찍어 보자.

www.acmicpc.net

재귀를 사용하는 문제이다.

규칙을 찾아보면 

0에서 *

1에서 * *

        *

 

2에서 f(1) f(1)

        f(1)

임을 알 수 있다. 그냥 printf를 써버리면 저런 모양이 안나오고 배열을 사용해야 한다.

 

재귀함수를 호출할 때마다 별찍기를 시작할 (row, col)을 정해서 별을 찍도록 한다.

row와 col은 제곱수만큼 늘어나므로 기저 조건 (0,0)에 2의 제곱수만큼 더한 시점이 n-1번째 별찍기를 시작하는 시점일 것이다. 

#include <stdio.h>
#include <cmath>

using namespace std;

char board[1024][1024];

void Print(int n)
{
  int m = pow(2, n);
  for (int i = 0; i < m; i++)
  {
    for (int j = 0; j < m - i; j++)
    {
      printf("%c", board[i][j]);
    }
    printf("\n");
  }
}
void fillStar(int cnt, int row, int col)
{
  if (cnt == 0)
  {
    board[row][col] = '*';
    return;
  }

  fillStar(cnt - 1, row, col);
  fillStar(cnt - 1, row + pow(2, cnt - 1), col);
  fillStar(cnt - 1, row, col + pow(2, cnt - 1));
}

int main(void)
{
  int n;
  scanf("%d", &n);

  for (int i = 0; i < pow(2, n); i++)
  {
    for (int j = 0; j < pow(2, n); j++)
    {
      board[i][j] = ' ';
    }
  }
  fillStar(n, 0, 0);

  Print(n);

  return 0;
}

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

[백준 5904] Moo 게임  (0) 2020.12.12
[백준 1780] 종이의 개수  (0) 2020.12.12
[백준 2167] 2차원 배열의 합  (0) 2020.12.11
[백준 1941] 소문난 칠공주  (0) 2020.12.11
[백준 3197] 백조의 호수  (0) 2020.12.11

댓글