http://acmicpc.net/problem/2447
{코드}
n = int(input()) data = [['*']*n for _ in range(n)] def remove_stars(length, x, y): global data if length == 1: return for row in data[x-length+length//3: x-length//3]: row[y-length+length//3:y-length//3] = ' '*(length//3) for i in range(length//(length//3)): for j in range(length//(length//3)): remove_stars(length//3, x-i*length//3, y-j*length//3) remove_stars(n, n, n) for row in data: print(''.join(row))
{설명}
코드가 난잡해 보이는데 간단히 설명하면 가장 큰 정사각형(문제 예시도 직사각형처럼 보이지만 정사각형입니다)부터 1/3에서 2/3 지점을 전부 공백으로 채우고 길이가 1/3인 정사각형을 찾아 다시 1/3에서 2/3을 공백으로 채우는 코드입니다.
---n이 9일때 실행되는 방법---
*********
*********
*********
*** ***
*** ***
*** ***
*********
*********
*********
*********
*********
*********
*** ***
*** ***
*** ***
*********
******* *
*********
*********
*********
*********
*** ***
*** ***
*** ***
*********
**** ** *
*********
*********
*********
*********
*** ***
*** ***
*** ***
*********
* ** ** *
*********
*********
*********
*********
*** ***
*** * *
*** ***
*********
* ** ** *
*********
*********
*********
*********
*** ***
*** * *
*** ***
*********
* ** ** *
*********
*********
*********
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
*********
******* *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
*********
**** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
사실 반복문으로 짜고 싶었는데 처음에 풀 때는 규칙을 제대로 안 찾고 해 버려서 다시 풀기에는 예쁜 코드가 머리에 아른거려서 바꾸진 않았습니다.
*찾아보니 슈퍼짱짱님의 코드는 제 코드의 상위 호환이랑 더 깔끔한 코드가 있으니 꼭 한번 봐주시기 바랍니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 2798번-파이썬/Python] 블랙잭 (0) | 2020.12.23 |
---|---|
[백준 11729번-파이썬/Python] 하노이의 탑 이동 순서 (0) | 2020.12.22 |
[백준 10870번-파이썬/Python] 피보나치 수 5 (0) | 2020.12.20 |
[백준 10872번-파이썬/Python] 팩토리얼 (0) | 2020.12.19 |
[백준 1002번-파이썬/Python] 터렛 (0) | 2020.12.18 |