본문 바로가기

Study/algorithms

[백준] 2447 별 찍기 - 10

반응형

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

문제설명

3의 배수 N이 입력되면 그에 맞춰서 재귀적으로 별을 찍으면 된다.

입력

27

출력

***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
*********         *********
* ** ** *         * ** ** *
*********         *********
***   ***         ***   ***
* *   * *         * *   * *
***   ***         ***   ***
*********         *********
* ** ** *         * ** ** *
*********         *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************

소스코드

C++

#include <cstdio>

int N;
int table[7000][7000];
void solve(int x, int y, int size) {
    if (size == 1) { 
        table[x][y] = 1;
        return;
    }
    int len = size/3;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == 1 && j == 1) {
                continue;
            }
            solve(x+len*i, y+len*j, len);
        }
    }
}
int main() {
    scanf("%d", &N);
    solve(0,0,N);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (table[i][j] == 1) {
                printf("*");
            } else {
                printf(" ");
            }
        }printf("\n");
    }
}

Go

package main

import (
	"bufio"
	"fmt"
	"os"
)

var table [3000][3000]int

func solve(y, x, size int) {
	if size == 1 {
		table[y][x] = 1
		return
	}

	l := size / 3

	for i := 0; i < 3; i++ {
		for j := 0; j < 3; j++ {
			if i == 1 && j == 1 {
				continue
			}
			solve(y+l*i, x+l*j, l)
		}
	}
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	var n int
	fmt.Fscanf(in, "%d\n", &n)
	solve(0, 0, n)
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			if table[i][j] == 1 {
				fmt.Fprintf(out, "*")
			} else {
				fmt.Fprintf(out, " ")
			}

		}
		fmt.Fprintf(out, "\n")
	}
	out.Flush()
}

결과

 

'Study > algorithms' 카테고리의 다른 글

[백준] 2798 블랙잭  (0) 2020.01.21
[백준] 11729 하노이 탑 이동 순서  (0) 2020.01.20
[백준] 10870 피보나치수 5  (0) 2020.01.19
[백준] 10872 팩토리얼  (0) 2020.01.19
[백준] 3053 택시 기하학  (0) 2020.01.19