아 .. 요게 안 되네 진짜 ㅠㅜㅠ 싶어서 꽤 오래 걸렸다.
접근법은 알겠는데 묘하게 구현에서 뻑나서 결국 몇 개월 전 스스로 풀었던 풀이를 보고 완성했다.
이번에 못 해낸 이유는 재귀에서 조건에 만족했을 때 바로 프린팅을 찍으려고 한 점.
재귀 도는 순서상 프린트를 한 번에 하는게 안 된다.
그래서 미리 같은 사이즈의 결과 배열을 만들어두고, 재귀함수를 돌면서 가장 말단에 갔을 때 결과 배열을 업데이트하고 마지막에 완성된 결과물을 한 번에 프린팅해야한다.
해당 정답 코드.
import sys
input = sys.stdin.readline
n = int(input())
template = [['*','*','*'],['*',' ','*'],['*','*','*']]
def recursive(x, y, n):
if n == 3:
for i in range(n):
for j in range(n):
result[x+i][y+j] = template[i][j]
return
for i in range(3):
for j in range(3):
if i != 1 or j != 1:
recursive(x+i*(n//3), y+j*(n//3), n//3)
else:
continue
if n == 3:
for t in template:
print(''.join(t))
else:
result = [[" "] * n for _ in range(n)]
recursive(0, 0, n)
여기서도 마찬가지로 n//3 을 매 재귀 호출마다 중첩해서 반복하고 있어서 마찬가지로 코드 정리를 한 번 하기로 했다.
일단 그 부분을 n//3을 변수에 넣어주었다.
수정 후 코드.
import sys
input = sys.stdin.readline
template = [['*', '*', '*'], ['*', ' ', '*'], ['*', '*', '*']]
def drawStar(x, y, n):
if n == 3:
for i in range(n):
for j in range(n):
result[x+i][y+j] = template[i][j]
return
k = n//3
for i in range(3):
for j in range(3):
if i != 1 or j != 1:
drawStar(x+i*k, y+j*k, k)
n = int(input())
result = [[" "] * n for _ in range(n)]
drawStar(0, 0, n)
for r in result:
print(''.join(r))
860ms -> 636ms 로 줄었다.
그리고 또 말단 (n==3)일 때 n변수에 굳이 접근할 필요 없지 않나 싶어서 숫자 값으로 변경했다.
수정 후 코드.
import sys
input = sys.stdin.readline
template = [['*', '*', '*'], ['*', ' ', '*'], ['*', '*', '*']]
def drawStar(x, y, n):
if n == 3:
for i in range(3):
for j in range(3):
result[x+i][y+j] = template[i][j]
return
k = n//3
for i in range(3):
for j in range(3):
if i != 1 or j != 1:
drawStar(x+i*k, y+j*k, k)
n = int(input())
result = [[" "] * n for _ in range(n)]
drawStar(0, 0, n)
for r in result:
print(''.join(r))
636ms -> 624ms 로 또 소폭 감소했다.
지금 계속 재귀로 도형에 접근하는 유형의 문제를 푸는 중인데.. 음.. 배열의 인덱스 부분에서 살짝 살짝 실수를 하는데 이걸 줄이는게 중요할 것 같다.
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 9663. N-QUEEN (0) | 2023.01.30 |
---|---|
[ BOJ / 파이썬 ] 15649. N과 M(1) (0) | 2023.01.29 |
[ BOJ / 파이썬 ] 쿼드트리 (0) | 2023.01.29 |
[ BOJ / 파이썬 ] 11729. 하노이 탑 이동 순서 (0) | 2023.01.28 |
[ BOJ / 파이썬 ] 1629. 곱셈 (0) | 2023.01.28 |