반응형
1. 문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
2. 입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
1
2
3
4
3. 출력
첫째 줄부터 차례대로 별을 출력한다.
*
*****
* *
* * *
* *
*****
*********
* *
* ***** *
* * * *
* * * * *
* * * *
* ***** *
* *
*********
*************
* *
* ********* *
* * * *
* * ***** * *
* * * * * *
* * * * * * *
* * * * * *
* * ***** * *
* * * *
* ********* *
* *
*************
4. 코드
import sys
n = int(sys.stdin.readline())
len = n + (3*(n-1))
# 빈값으로 배열 생성
stars = [[' ' for _ in range(len)] for _ in range(len)]
def checkStar(n,x,y):
# 정가운데 별찍기
if n == 1:
stars[x][y] = '*'
return
# 별 사각형 최대길이
len = n + (3*(n-1))
for i in range(len):
# 좌측
stars[x+i][y] = '*'
# 상단
stars[x][y+i] = '*'
# 하단
stars[x+len-1][y+i] = '*'
# 우측
stars[x+i][y+len-1] = '*'
# 사각형내 사각형 별 찍기 호출
checkStar(n-1,x+2,y+2)
checkStar(n,0,0)
for r in stars:
# 배열을 하나씩 합쳐서 문자열로 만든다.
print(''.join(r))
5. 풀이설명
① 입력 받은 값 × 4 -3 을 별찍기의 최대 길이로 정한다.
② ①에서 구한 최대 길이의 빈값으로 이루어진 배열을 생성한다.
③ ①에서 구한 최대 길이 len,0,0을 인수로 checkStar 메소드를 호출한다.
④ n=len, x=0, y=0을 매개변수로 받고 ①의 최대길이를 다시 구한다.
⑤ (x+0,y) ~ (x+len-1,y) / (x,y+0) ~ (x,y+len-1) / (x+len-1,y) ~ (x+len-1,y+len-1) / (x,y+len-1) ~ (x,y+len-1) 상하좌우에 별을 찍는다.
⑥ checkStar 메소드에 len -2, x+2, y+2를 인수로 재호출한다.(재귀함수)
⑦ n이 1일 경우 x.y 좌표(정중앙) 별을 찍고 return 한다.
⑧ join 함수를 통해 배열을 한 문자열로 출력한다.
6. 느낀점
재귀함수 호출로 구현하는 것이 핵심인데 join 함수를 통해 배열을 문자열로 쉽게 출력하는 법을 배웠다.
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
구현(등수 구하기/S4) - 1205번 (0) | 2022.11.22 |
---|---|
구현(자리배정/S4) - 10157번 (0) | 2022.11.20 |
구현(빙고/S4) - 2578번 (1) | 2022.11.19 |
구현(숫자 정사각형/S4) - 1051번 (0) | 2022.11.18 |
구현(팰린드롬 숫자/S5) - 8611번 (0) | 2022.11.17 |