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

[백준 2448] 별 찍기 - 11

by m2162003 2020. 12. 29.

www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

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

종료조건을 높이가 3인 삼각형으로 두고 재귀를 진행한다.

 

삼각형이 시작하는 row, col을 받아서 재귀를 진행한다.

가장 큰 삼각형은 시작점이 (0,0)이므로 0,0과 입력받은 값을 높이로 재귀 함수를 시작한다.

 

#include <stdio.h>
#include <math.h>

using namespace std;
int n;
char star[3 << 10][3 << 11];

void solve(int row, int col, int h)
{
  if (h == 3)
  {
    star[row][col + 2] = '*';
    star[row + 1][col + 1] = star[row + 1][col + 3] = '*';
    for (int i = 0; i < 5; i++)
    {
      star[row + 2][col + i] = '*';
    }
    return;
  }

  h /= 2;
  solve(row, col + h, h);
  solve(row + h, col, h);
  solve(row + h, col + h * 2, h);
}
int main(void)
{
  scanf("%d", &n);

  solve(0, 0, n);

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < 2 * n - 1; j++)
    {
      if (star[i][j] == '*')
      {
        printf("*");
      }
      else
      {
        printf(" ");
      }
    }
    printf("\n");
  }
  return 0;
}

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

[백준 11501] 주식  (0) 2020.12.31
[백준 1753] 최단경로  (0) 2020.12.30
[백준 5567] 결혼식  (0) 2020.12.29
[백준 11399] ATM  (0) 2020.12.29
[백준 5545] 최고의 피자  (0) 2020.12.29

댓글