2439번: 별 찍기 - 2
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
www.acmicpc.net
# 문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별을 출력하시오.
# 입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
# 출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
# 정답입니다!
# ver1
a = int(input())
for i in range(a) :
for j in range(a):
if i + j <= a - 2 :
print(' ', end = '')
else :
print('*', end = '')
print()
5
*
**
***
****
*****
a를 입력받고, 이중 for문으로 행과 열로 i와 j가 움직이게 끔 해준다. (i=행, j=열)
if문으로 조건을 만족하는 곳에 '*'를 찍어주어야 하는데,
여러가지로 계산을 해보니 i+j가 a-2보다 작거나 같은 경우를 제외하고 '*'을 찍어주면 되는 것을 알게 되었다.
a=3일 경우를 예로 하고 설명을 해보자면,
회색 칸이 공백으로, 주황색 칸이 *로 채워질 부분이다.
i+j ≥ 2 일 경우에 주황색(*)으로 채워지는 것을 알 수 있다.
즉, i+j >= 1 일 경우에는 회색(공백)이 채워진다는 것이다.
1은 a=3에서 -2를 한 수로 a-2로 표현할 수 있다.
결론적으로 i+j >= a-2 일 경우엔 공백으로, 이외에는 '*'로 채워지도록 조건을 만들 수 있다.
(수학적으로 좀 더 잘 설명해주실 수있는 분은 쪽지나 댓글 환영합니다!!)
# ver2
a = int(input())
for i in range(1, a+1) :
print(('*' * i).rjust(a))
5
*
**
***
****
*****
위의 풀이(ver1)보다 간결한 코드이다.
이전 포스팅인 '별찍기-1' 에서 했던 코드에서 조금 변형시켰다.
1부터 입력받은 숫자의 a+1까지 반복하는 for문에서 i번 째일 때마다 '*'을 i번 만큼 찍어주는데
그것들을 .rjust(a) 으로 오른쪽 정렬을 시켜서 출력시킨다.
'백준 알고리즘 > python_' 카테고리의 다른 글
[백준 알고리즘][python] 10952번. A+B - 5 (0) | 2021.08.17 |
---|---|
[백준 알고리즘][python] 10871번. X보다 작은 수 (0) | 2021.08.17 |
[백준 알고리즘][python3] 2438번. 별 찍기 - 1 (0) | 2021.08.03 |
[백준 알고리즘][python3] 11022번. A+b - 8 (0) | 2021.08.03 |
[백준 알고리즘][python3] 11021번. A+B - 7 (0) | 2021.08.03 |