[BAEKJOON] 2448번 별 찍기 - 11

2024. 3. 10. 12:47·Algorithm/DFS

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

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

www.acmicpc.net

예시 그림

이 문제의 핵심은 이 그림을 가지고 어떤 규칙이 있는지 유추하는 것이 핵심이다.

같은 모양이 반복적으로  나타나는 구조인 프랙탈(?) 구조인 것을 볼 수 있다.

여기서 나의 접근 방법은 Top-Down Approach를 통 DFS로 결정을 했다.

3x2^k (0<=k<=10) 인 줄까지 출력을 해야하는데 여기서

 

이 모양이 가장 기본이 되는(가장 작은) 별 모양이다.

나는 이것을 하나의 '그룹' 이라고 정했다. 

 

 

점화식

 맨 왼쪽위의 좌표를 (y,x) 라고 두었을때의 점화식을 표현했다.

그리고 각 그룹의 제일 왼쪽이고 위쪽인 좌표를 기준으로 두었다.

그림만 잘 해석해서 점화식만 잘 세워준다면 어려울 것 없는 문제였다,,(문제는 그림 해석이 진짜 오래걸렸다는 점이지만,,,)

소스코드
#include <vector>
#include <iostream>
#include <string>
#define MAX 3100
using namespace std;
int n;
string star[] = {"  *  ", " * * ", "*****"};
char map[MAX][MAX*2];
//규칙적인 별 모양이 3x2^k 만들어 지고, 크게 세부분으로 나눠짐
void dfs(int num, int y, int x) {
	if (num == 1) {
		for (int i = 0; i < 3; i++)
			for (int j = 0; j < 5; j++) map[y + i][x + j] = star[i][j];
		return;
	}
	dfs(num / 2, y, x+3*num/2);
	dfs(num / 2, y + 3 * num / 2, x);
	dfs(num / 2, y + 3 * num / 2, x + 3 * num);
}
int main() {
	cin >> n;
	dfs(n / 3, 0, 0);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < 2 * n - 1; j++) {
			if (map[i][j] == '*') cout << '*';
			else cout << ' ';
		}
		cout << '\n';
	}
}

 

'Algorithm > DFS' 카테고리의 다른 글

[BAEKJOON] 2668번 숫자고르기  (0) 2024.04.16
[BAEKJOON] 2644번 촌수계산  (0) 2024.04.16
[BAEKJOON] 14891번 톱니바퀴  (0) 2024.04.09
[BAEKJOON] 12919번 A와 B 2  (0) 2024.03.21
[BAEKJOON] 2250번 트리의 높이와 너비  (0) 2024.03.06
'Algorithm/DFS' 카테고리의 다른 글
  • [BAEKJOON] 2644번 촌수계산
  • [BAEKJOON] 14891번 톱니바퀴
  • [BAEKJOON] 12919번 A와 B 2
  • [BAEKJOON] 2250번 트리의 높이와 너비
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
[BAEKJOON] 2448번 별 찍기 - 11
상단으로

티스토리툴바