Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1003 파이썬
- 1806 파이썬
- 2096 파이썬
- 자료구조
- 백준 2096
- Android mvp
- 5582 DP
- 자바
- Jetpack Room
- 코루틴 플로우
- 10819 파이썬
- 1806 투포인터
- 1753 파이썬
- flow buffering
- Coroutine Flow
- 1644 파이썬
- 이진 탐색
- 1806 백준
- 1753 다익스트라
- 안드로이드 hilt
- 백준 10819
- 5582 파이썬
- 투포인터 알고리즘
- 백준 1644
- 6588 파이썬
- Android Room
- java
- git local remote
- android hilt
- 백준 5582
Archives
- Today
- Total
Gemstone's Devlog
[백준] 2447번: 별 찍기 - 10 본문
https://www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
아이디어를 생각하기까지 많은 시간이 걸렸다. 알고리즘 분류를 보니 '재귀'를 이용하여 푸는 문제였다.
최대한 재귀적으로 구현하려고 소스코드를 짜보았다.
import sys
input = sys.stdin.readline
cell = ['***', '* *', '***']
def drawStar(num):
a = num//3
temp = []
if a == 1:
return cell
else:
for x in drawStar(a):
x = x*3
temp.append(x)
temp = temp*3
for i in range(a, 2*a):
temp[i] = temp[i][:a] + (' ' * a) + temp[i][num-a:]
return temp
n = int(input())
for line in drawStar(n):
print(line)
크기 3의 패턴을 기본셀(단위)로 보았다. 한 라인 별로, cell이라는 문자열에 리스트로 저장했다.
규칙성을 찾아보기 위해 함수 drawStar(3)의 반환값과 함수 drawStar(9)의 반환값을 비교해보겠다.
drawStar(3) == ['***', '* *', '***']
drawStar(9) == ['*********', '* ** ** *', '*********',
'*********', '* ** ** *', '*********',
'*********', '* ** ** *', '*********']
# 찾은 규칙 : drawStar(3)의 각 요소를 3배 반복해서 늘리고, 전체 리스트를 3배 반복해서 늘린다.
하지만 여기서 빼먹은 것이 하나 있다.
바로 가운데에 공백이 있다는 조건을 빼먹은 것이다.
노트에 그림을 그려보면 알겠지만,
n이 9일 때, drawStar(9)[3][3:6], drawStar(9)[4][3:6], drawStar(9)[5][3:6] 이 공백임을 알 수 있다. (index 3부터 3개 공백)
n이 27일 때에는 어떨까?
예제 출력 1을 보면, index가 9부터 9개가 연속으로 공백인 것 만 빼고는 동일하다.
위 소스코드의 16~17번째 라인에 이와 같은 규칙성을 적용한 것을 구현하였다.
'Data Structure & Algorithms' 카테고리의 다른 글
[백준] 1406번: 에디터 (0) | 2021.08.17 |
---|---|
[백준] 2346번: 풍선 터뜨리기 (0) | 2021.08.16 |
[백준] 1011번: Fly me to the Alpha Centauri (0) | 2021.08.10 |
[백준] 1316번: 그룹 단어 체커 (0) | 2021.08.06 |
[백준] 2908번: 상수 (0) | 2021.08.06 |