job다한 공부
백준 2447번: 별 찍기-10(python) 본문
https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
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
|
#별 찍기-리스트 이용
global list
def triple(list,n):
if n==1:
return 0
triple(list,n//3)
for i in range(1,len(list)):
if i%n>=n//3 and i%n<n/3*2:
for j in range(1,len(list)):
if j%n>=n//3 and j%n<n/3*2: # 여기서 홀수번째일시 구명
list[i][j]=0
return 0
n=int(input())
list=[[1 for i in range(n)] for i in range(n)]
triple(list,n)
for i in range(n):
for j in range(n):
if list[i][j]==0:
print(" ",end="")
else:
print("*",end="")
print()
|
cs |
-반복문을 위한 별찍기는 간단하지만, 재귀를 이용해 풀이하려고 하니 시간이 꽤 걸렸다. 하지만 이 문제를 통해 재귀를 더 이해할 수 있었다. 재귀의 작동방식에 대해 찾아보았고 아래 그림이 도움이 되었다.+참고링크
초보 탈출 #4 - 함수 호출의 원리 및 재귀호출 | 10분 TV
초보 탈출 #4 - 함수 호출의 원리 및 재귀호출 핵심 강의 강의 개요 이번 주제의 핵심은 재귀호출을 이해하는 것입니다. 재귀호출을 이해하기 위해서는 우선 함수가 호출 되었을 때 컴퓨터 내부
10bun.tv
-또한 이문제를 풀이하기 위해 리스트를 전역 변수로 선언하였는데, 리턴 값으로 리스트를 보내자니 헷갈리는 부분이 많아 그냥 리스트를 값이 있는것은 1, 없으면 0으로 정해준 뒤, 처음에 1로 초기화해 두고 필요 없는 부분들을 구멍내는 형식으로 했다. 그리고 프린트할때 0은 공백으로 1은 별으로 출력해주면 끝.
-복잡한 알고리즘을 풀이할 때 종이에 써서 풀면 도움이 되는 것 같다. 이 문제를 풀이할 때 입력받은 n을 활용해 식을 만들어야겠다는 생각을 하고 규칙을 찾고 식을 만들었더니 생각보다 쉽게 풀렸다. 처음에 재귀를 어떻게 활용해야하는지 몰라 헷갈렸지만 위의 링크에 있는 내용을 통해 공부한 뒤 시도하니 도움이 됐다.
-이 문제에서는 구멍을 뚫을 때 리스트 전부를 돌면서도 조건에 맞는 것만 구멍을 뚫어야하기 때문에 리스트 전체를 돌고, 행에 조건이 부합한다면 열도 검사를 하는 식으로 진행했다. (시간을 그나마 줄이는 법이라 생각했다.) 그리고 구멍을 뚫는 규칙은 n이 3이었을때 (1,1), 9였을 때 ( 3,3)~(5,5)까지로 각각 나머지의 범위가 n//3의 1배수부터 2배수 미만까지라는 규칙을 이용해 조건문을 세웠다.
'백준 > 재귀' 카테고리의 다른 글
백준 25501번: 재귀의 귀재-파이썬(python) (0) | 2022.09.19 |
---|---|
백준 11729번: 하노이 탑 이동 순서 (1) | 2022.09.12 |
백준 10870번: 피보나치 수 5-파이썬(python) (0) | 2022.09.02 |
백준 10872번: 팩토리얼-파이썬(python) (0) | 2022.09.02 |