[백준 2447번] 별찍기 10 - Python(파이썬) 자세한 풀이
반응형
1. 문제
백준 2447 번
https://www.acmicpc.net/problem/2447
2. 아이디어
(1) n = 3^1 일때를 생각해보자! (^ 기호는 제곱을 나타냅니다. ex) 2^2 = 4, 2^3 = 8)
다음과 같이 별이 찍힌다는 것을 알 수 있다.
(2) 그럼 이제 일반적인 n = 3^i에대하여 그림을 상상해보자
그림을 보면 알겠지만, n = 3^1 일때는 가운데를 비워두고 "별"이 찍힌 것처럼
n = 3^i 일때는 가운데를 비워두고 "n = 3^(i-1) 일때의 별 배열"이 찍힙니다.
이게 핵심아이디어 입니다. 이것만 이해하셨다면 이문제는 푼것이나 다름없습니다 ㅎㅎ
3. 풀이
(1) 코드
# 별 찍는 재귀 함수
def draw_star(n) :
global Map
if n == 3 :
Map[0][:3] = Map[2][:3] = [1]*3
Map[1][:3] = [1, 0, 1]
return
a = n//3
draw_star(n//3)
for i in range(3) :
for j in range(3) :
if i == 1 and j == 1 :
continue
for k in range(a) :
Map[a*i+k][a*j:a*(j+1)] = Map[k][:a] # 핵심 아이디어
N = int(input())
# 메인 데이터 선언
Map = [[0 for i in range(N)] for i in range(N)]
draw_star(N)
for i in Map :
for j in i :
if j :
print('*', end = '')
else :
print(' ', end = '')
print()
(2) 해설
자 이제 그럼 구체적으로 살펴볼까요?
draw_star라는 이름의 재귀함수를 선언합니다.
n = 3^1 이라면 (가장 기본적인 형태) 우리가 알고있는 별데이터를 입력합니다.
그 뒤에 나오는 코드가 n = 3^i 일때 입니다.
코드를 이해하셔서 내것으로 만들기를 바랍니다.
또한, 본 문제를 해결하기 위해 우리가 메인으로 다룰 데이터는 2차원 배열입니다!
가로 세로 길이가 각각 n인 2차원 배열을 만들어서 별의 존재 여부를 저장하는 것이죠.
코드가 그리 길지는 않으니 금방 이해하실 수 있을거라 생각됩니다.
추가적으로 2차원 배열에서1은 '별' 0은 '빈칸'이라는것을 알아두세요!
오늘도 봐주셔서 감사합니다~! (댓글, 공감눌러주는 센스~ㅎㅎ)
p.s. 질문과 오류 지적은 언제나 환영입니다.
반응형
'밤샘코딩 > 백준 단계별로 풀어보기 (문제)' 카테고리의 다른 글
[파이썬 문제풀이 2강] 백준 단계별로 풀어보기 2.1 < 9498번 > (0) | 2022.11.15 |
---|---|
[파이썬 문제풀이 1강] 백준 단계별로 풀어보기 1.1 < 3003번 > (0) | 2022.11.15 |
[백준 2839번] 설탕 배달 - Python(파이썬) 자세한 풀이 (0) | 2021.07.07 |
[백준 11729번] 하노이 탑 이동순서 - Python(파이썬) 자세한 풀이 (5) | 2020.07.29 |
댓글
이 글 공유하기
다른 글
-
[파이썬 문제풀이 2강] 백준 단계별로 풀어보기 2.1 < 9498번 >
[파이썬 문제풀이 2강] 백준 단계별로 풀어보기 2.1 < 9498번 >
2022.11.15 -
[파이썬 문제풀이 1강] 백준 단계별로 풀어보기 1.1 < 3003번 >
[파이썬 문제풀이 1강] 백준 단계별로 풀어보기 1.1 < 3003번 >
2022.11.15 -
[백준 2839번] 설탕 배달 - Python(파이썬) 자세한 풀이
[백준 2839번] 설탕 배달 - Python(파이썬) 자세한 풀이
2021.07.07 -
[백준 11729번] 하노이 탑 이동순서 - Python(파이썬) 자세한 풀이
[백준 11729번] 하노이 탑 이동순서 - Python(파이썬) 자세한 풀이
2020.07.29