https://www.acmicpc.net/problem/2439
문제
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
문제설명
별 개수를, 입력 횟수만큼 하나씩 늘려가면서 맞춰서 출력하면 된다.
다만, 별은 우측부터 1개씩 쌓아나가져야 한다.
풀이 과정
Point 1: for문이 돌 때, '한번에' 횟수만큼 별을 찍어줘야 한다.
for문 각각마다 어떻게 한번에 별을 많이 찍을지 고민을 좀 하다가, 문자열도 곱셈이 가능하다는 점에 착안하였다.
Point 2: 별을 우측으로 붙여야한다. 이 때 공백을 사용하였다.
즉, 별을 제외한 숫자만큼의 앞은 공백으로 채우고, 별 개수만큼을 나머지로 채웠다.
import sys N = sys.stdin.readline() N_int=int(N) for i in range(1,N_int+1): print(" "*(N_int-i)+"*"*i)
- 입력 인자 받기
N=sys.stdin.readline() 함수를 사용 해 사용자의 입력 인자를 받도록 하였다. input() 함수를 써도 상관은 없을 것.
*여기서 주의할 점은, intput() 함수와 sys.stdin.readline() 함수는 모두 문자열을 출력하기 때문에 이를 정수형으로 고쳐주어야 한다.
따라서 range 내에도 int(sys.stdin.readline()) 처리를 해 주었다.
- for문 구성
i는 해당 iteration의 별의 개수가 된다. 또한 문자열*정수를 코딩하는 경우 정수만큼 중복돼서 출력된다.
별 개수만큼 찍기: N 횟수만큼 Case를 돌릴 것이어서, int(N)처리 후 for문에서 range(1,N+1)로 변경 해준다. 또한 range(1,N)으로 하면, 1,2,3,...N-1까지 계산되므로 이에 유의한다.
빈칸을 앞에 남은 개수만큼 채우기: N_int-i라고 하면, i가 별의 개수라고 했을 때 이 외 남은 숫자는 공백의 개수가 된다.
print(" "*(N_int-i)+"*"*i)
" " 단순히 스페이스를 넣은 문자열에 *곱셉을 통해 공백의 개수를 넣어주었다. 다만 별의 개수를 제외한 나머지기 때문에 N_int-i로 구성하였다.
나머지 별은 "*"*i (별의 개수)를 표현하였다.
결과는 아래와 같다.
'파이썬 > 파이썬 알고리즘' 카테고리의 다른 글
파이썬 백준 2742번 제문 는하력출 지까N 터부1 (0) | 2021.02.12 |
---|---|
파이썬 백준 2438번 별 찍기 - 1 (0) | 2021.02.12 |
파이썬 백준 10871번 X보다 작은 수 (0) | 2021.02.12 |
백준 solved.ac 사용하여 난이도 정보 표시하기 (0) | 2021.02.11 |
파이썬 백준 10952번 A+B - 5 0 0이 들어올 때까지 A+B를 출력하는 문제 (0) | 2021.02.11 |
댓글