티스토리 뷰

문제 링크

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

 

10997번: 별 찍기 - 22

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net


두번째 줄에 공백없이 별 하나만 찍고 개행처리를 해야 문제 통과할 수 있습니다.

 

구현 코드

 

#include <iostream>
using namespace std;
char Map[500][500];
void draw_stars(int depth, int idx){
if(depth == 1){
Map[idx][idx] = '*';
Map[idx+1][idx] = '*';
Map[idx+2][idx] = '*';
return;
}
int len = 4 * (depth - 1) + 1;
for(int i=idx;i<len+idx;i++){
Map[idx][i] = '*';
Map[idx + len + 1][i] = '*';
}
for(int i=idx;i<len+idx+2;i++){
Map[i][idx] = '*';
Map[i][idx + len - 1] = '*';
}
Map[idx+1][idx+len-1] = ' ';
Map[idx+2][idx+len-2] = '*';
draw_stars(depth-1, idx+2);
return;
}
int main(){
int n;
cin >> n;
if(n == 1){
cout << '*' << endl;
return 0;
}
int len = 4 * (n - 1) + 1;
for(int i=0;i<len+2;i++)
for(int j=0;j<len;j++)
Map[i][j] = ' ';
draw_stars(n,0);
for(int i=0;i<len+2;i++){
if(i == 1){
cout << '*' << endl;
continue;
}
for(int j=0;j<len;j++){
cout << Map[i][j];
}
cout << endl;
}
return 0;
}
view raw 10997.cpp hosted with ❤ by GitHub
import sys
def draw_stars(depth, idx):
if depth == 1:
Map[idx][idx] = '*'
Map[idx+1][idx] = '*'
Map[idx+2][idx] = '*'
return
r = 4 * (depth - 1) + 1
c = 4 * (depth - 1) + 3
for i in range(idx, r+idx):
Map[idx][i] = '*'
Map[idx+r+1][i] = '*'
for i in range(idx, c+idx):
Map[i][idx] = '*'
Map[i][idx+r-1] = '*'
Map[idx+1][idx+r-1] = ' '
Map[idx+2][idx+r-2] = '*'
draw_stars(depth-1, idx+2)
return
n = int(input())
if n == 1:
print('*')
sys.exit()
row = 4 * (n - 1) + 1
col = 4 * (n - 1) + 3
Map = [[' '] * row for _ in range(col)]
draw_stars(n,0)
for i in range(col):
if i == 1:
print('*')
continue
for j in range(row):
print(Map[i][j], end="")
print("")
view raw 10997.py hosted with ❤ by GitHub