[백준 2447번-파이썬/Python] 별 찍기 - 10
알고리즘 공부/BOJ백준 풀이

[백준 2447번-파이썬/Python] 별 찍기 - 10

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일때 실행되는 방법---

*********
*********
*********
***   ***
***   ***
***   ***
*********
*********
*********

*********
*********
*********
***   ***
***   ***
***   ***
*********
******* *
*********

*********
*********
*********
***   ***
***   ***
***   ***
*********
**** ** *
*********

*********
*********
*********
***   ***
***   ***
***   ***
*********
* ** ** *
*********

*********
*********
*********
***   ***
***   * *
***   ***
*********
* ** ** *
*********

*********
*********
*********
***   ***
***   * *
***   ***
*********
* ** ** *
*********

*********
*********
*********
***   ***
* *   * *
***   ***
*********
* ** ** *
*********

*********
******* *
*********
***   ***
* *   * *
***   ***
*********
* ** ** *
*********

*********
**** ** *
*********
***   ***
* *   * *
***   ***
*********
* ** ** *
*********

*********
* ** ** *
*********
***   ***
* *   * *
***   ***
*********
* ** ** *
*********

사실 반복문으로 짜고 싶었는데 처음에 풀 때는 규칙을 제대로 안 찾고 해 버려서 다시 풀기에는 예쁜 코드가 머리에 아른거려서 바꾸진 않았습니다.

*찾아보니 슈퍼짱짱님의 코드는 제 코드의 상위 호환이랑 더 깔끔한 코드가 있으니 꼭 한번 봐주시기 바랍니다.