백준 10992 : 별 찍기(17)
Python3
전체 코드 :
N = int(input())
for i in range(1, (N+1)):
if i == 1: # 첫 번째 줄
print(' ' * (N - i) + "*")
elif i == N: # 마지막 줄
print("*" * (i * 2 - 1))
else: # 중간
print(' ' * (N - i) + "*" + ' ' * (i * 2 - 3) + "*")
별 찍기의 글은 별 찍기(5)로 마무리 하려고 했지만, 별 찍기의 마지막 문제는 마무리 지어야 겠다는 생각이 들었다.
( 별 찍기(5) : >> [Python/Algorithm] - 백준 2442 : 별 찍기(5)
백준 2442 : 별 찍기(5)
Python3 전체 코드 : N = int(input()) for i in range(N): print(' '* (N-i-1) + "*" * ((i+1)*2-1)) 이번에는 뭔가 range(N) 으로 한게 뭔가 코드가 지저분해 보이는 것 같다. N = int(input()) for i in ra..
chae-developer.tistory.com
일단 input output 예제를 보자면,
#input
3
#output
*
* *
*****
#input
5
#output
*
* *
* *
* *
*********
#input
10
#output
*
* *
* *
* *
* *
* *
* *
* *
* *
*******************
10줄로 별을 찍어보니 약간 크리스마스 트리 같다는 생각이 든다.
어쨌든 규칙은 위 예제들로 알 수 있다.
일단 규칙을 보자면,
1. 맨 마지막줄에 입력된 ( N * 2 - 1 ) 개의 별이 띄어쓰기 없이 쭉 출력된다.
2. 첫 번째 줄에는 N개의 가운데에 별이 찍힌다.
3. 중간에는 각 양쪽으로 트리모양을 이루며 왼쪽 (1개) 오른쪽 (1개) , 총 2개의 별이 찍힌다.
수학적인 거라서 딱히 분석할 코드는 없지만, 분석해보겠다.
if i == 1:
print(' ' * (N - i) + "*")
for문의 변수 i 가 1일 때 해당하는 코드이다. if문을 사용했다.
N - i 만큼 띄어쓰기를 한 다음, 별을 찍는다.
예를 들어, N이 5일 때 N - i ( 5 - 1 ) 인 4 만큼 띄어쓰기를 하고 별 찍기!
#123456789
*
* *
* *
* *
*********
elif i == N:
print("*" * (i * 2 - 1))
마지막 줄의 별은 띄어쓰기 없이 N * 2 - 1 개가 찍히니까 단순히 별 만 프린트 해주면 된다.
파이썬에서는 else if 를 elif 라고 쓰더라.. 놀랍다.
else:
print(' ' * (N - i) + "*" + ' ' * (i * 2 - 3) + "*")
굳이 따지자면 중간이 가장 생각하기 어렵겠다.
간단하게 보자면, " 띄어쓰기 1 ' + 별 1 + ' 띄어쓰기 ' 2 + 별 2 " 과 같은 형식이다.
#123456789
*
* *
* *
* *
*********
' 띄어쓰기1 ' 는 첫 번째 줄과 같이 N - i 만큼 띄어쓰기 해주면 된다.
' 띄어쓰기2 ' 는 두 번째 줄일 때는 1번, 세 번째 줄일 때는 3번, 네 번째 줄일 때는 5번 ... 이렇게 홀수로 간다.
i 번째 줄일 때 i * 2 - 3 과 같다는 것을 눈치 챌 수 있다!..
그렇게 ' 띄어쓰기2 ' 는 i * 2 - 3 만큼 띄어쓰기를 해주면 된다.
드디어 별 찍기가 끝났다. 야호.
해당 문제 : https://www.acmicpc.net/problem/10992
10992번: 별 찍기 - 17
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net