[BOJ][Python][실1][2447] 별 찍기 - 10
문제 링크
첫 번째 풀이
가운데 부분을 제외하고 8방향으로 ‘*‘를 채우는 과정을 재귀적으로 진행합니다.
정답코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
from math import pi, sqrt
from collections import deque
# 배열 초기화
# MAX = 15
# arr = [[0] * MAX for _ in range(MAX)]
# arr = [0] * MAX
# TestCase
# for _ in range(int(input())):
# 배열 접근
# for r in range(MAX):
# for c in range(MAX):
# 파일 입력
# sys.stdin = open('input.txt', 'r')
n = int(sys.stdin.readline())
MAX = n
arr = [[' ' for _ in range(MAX)] for _ in range(MAX)]
def recur(N, x, y):
global arr
if N == 1:
arr[x][y] = '*'
else:
for i in range(3):
for j in range(3):
if i != 1 or j != 1:
recur(N // 3, x + (N // 3) * i, y + (N // 3) * j)
recur(n, 0, 0)
str = ''
for s in arr:
print(*s, sep='')
두 번째 풀이
전체를 ‘*‘로 만들고 가운데만 ‘ ‘로 만드는 연산을 진행한 뒤, 8방향에 대해서 같은 과정을 진행합니다.
이 때 n이 0일 때까지 진행하면 시간초과, 1까지 진행하면 정답입니다.
정답코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys
from math import pi, sqrt
from collections import deque
# 파일 입력
# sys.stdin = open('input.txt', 'r')
n = int(sys.stdin.readline())
MAX = n
arr = [['*' for _ in range(MAX)] for _ in range(MAX)]
def recur(arr, x, y, n):
if n == 1:
return
# 왼쪽 위 좌표가 (x,y)이고 길이가 n인 경우
n //= 3
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
for r in range(n, n * 2):
for c in range(n, n * 2):
arr[x+r][y+c] = ' '
else:
recur(arr, x + n * i, y + n * j, n)
recur(arr, 0, 0, n)
for s in arr:
print(*s, sep='')
Success Notice: 수고하셨습니다.
Leave a comment