본문 바로가기
파이썬/파이썬 알고리즘

파이썬 백준 2439번 별 찍기 - 2

by Go! Jake 2021. 2. 12.

 

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

문제

첫째 줄에는 별 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 (별의 개수)를 표현하였다.

결과는 아래와 같다.

 

댓글