반응형
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 |