[ 문제 ]
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
[ 입력 ]
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
[ 출력 ]
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
[ 예제 입력 1 복사 ]
1
[ 예제 출력 1 복사 ]
*
[ 예제 입력 2 복사 ]
2
[ 예제 출력 2 복사 ]
*
* *
[ 예제 입력 3 복사 ]
3
[ 예제 출력 3 복사 ]
*
* *
* * *
[ 예제 입력 4 복사 ]
4
[ 예제 출력 4 복사 ]
*
* *
* * *
* * * *
[ 출처 ]
- 문제를 만든 사람: baekjoon
< 코드 >
[ 설명 ]
- n개의 입력을 받습니다
- n + 1을 해주는데 n + 1을 왜 하냐면, 앞 빈칸의 수를 맞춰주기 위함입니다. (글로는 이해하기 힘드실 수 있습니다 밑에 그림 참조 부탁드립니다.)
- 2의 배수 부분은 별표를 프린트 하고, 그 이후는 빈칸으로 프린트합니다
n = int(input())
m = n + 1
if n>=0 and n<101:
for i in range(1,m):
print(" " * (n - i), end="") # 앞 빈칸
for j in range(1,2*i):
if j % 2 == 1:
print("*", end="")
else:
print(" ", end="") # 중간 빈칸
print("") # 뒤 빈 칸
잘 이해가 안 되시나요? 코드를 조금 바꿔 보겠습니다.
< 수정한 코드 >
n = int(input())
m = n + 1
if n>=0 and n <101:
for i in range(1, m): # 첫 for 문
print("앞" * (n - i), end="") # 1
for j in range(1,2*i): # 두 번째 for 문
if j % 2 == 1:
print("*", end="") # 2
else:
print("중", end="") # 3
print("뒤") # 4
그리고 결과를 바볼까요?
느낌이 조금 오시나요?
n이 5라 가정하면, m = 6 이 됩니다. 첫 for문에서 그리고 n - i는 5 - 1(i = 1부터 시작) 이므로 앞이 4개가 출력!
그런 후 두 번째 for문으로 들어가서, j는 1부터 2 * i (2)까지 두 번 출력이 될 거 j = 1 은 if문을 만족하므로 ( 1의 나머지 연산은 1 이므로 ) * 한 번을 찍게 되고 그 후 for문이 끝나고 마지막으로 print("뒤")를 출력 후
다음 for문으로 나아가는 거지요.
혹시 아직도 n + 1을 왜 하는지 이해가 안 되실 수 있습니다. 그렇다면 n + 1을 하지 마시고 for문을 돌려서 출력을 해보시면 이유를 알 수 있을 것입니다.
후기
별 찍기를 간단하게 2개만 알아봤습니다. 백준에는 여러개의 뼐찍기가 존재합니다.
여러개를 풀어보면서 입출력에대해 공부하는것이 많은 도움이 됩니다.
저도 그랬고요.
'백준 코딩 테스트' 카테고리의 다른 글
백준 - 1260번 DFS와 BFS (0) | 2021.02.14 |
---|---|
백준 - 11054번 가장 긴 바이토닉 부분 수 (0) | 2021.02.12 |
백준 - 2225번 합분해 (0) | 2021.02.11 |
백준 1463번 - 1로 만들기 (0) | 2021.01.28 |
백준 2438 번 별 찍기 - 1 (0) | 2021.01.22 |