문제
입력값 n을 input 했을 때(0≤n≤100), '#'만으로 이루어진 n개의 층을 가진 탑이 출력되도록 한다.
단, 탑의 층수와 해당 층에 존재하는 문자의 수는 같으며, 오른쪽 정렬로 출력한다.
Sample Input :
6
Sample Output :
#
##
###
####
#####
######
내 코드:
import math
import os
import random
import re
import sys
def staircase(n):
star = '#' # 탑을 쌓을 문자
space = ' ' # 오른쪽 정렬을 만들 공백
li = []
count = 1 # 층을 만들 카운트
while True:
li.append(space*(n-count) + star*count) # 카운트 수에 따라 #개수와 공백 수를 조절
count += 1
if count > n: # 카운트가 n보다 커졌을 경우 루프 정지
break
return li
if __name__ == '__main__':
n = int(input())
star = staircase(n)
for i in star: # 리스트를 첫 번째 item부터 한 줄씩 출력
print(i)
Comment: 기본적으로 한 개의 층이 될 item을 모아 list를 만들고, for문을 통해 하나씩 출력하는 게 핵심입니다. 하지만 처음에는 머릿속에 어떻게 하면 될지 잘 그려지지 않더라고요. 그래서 특정한 숫자를 입력했을 때 그 숫자만큼의 특수문자를 출력하는 함수를 만들어보기도 했습니다. 아래는 그 함수입니다.
def makestar(n):
spec = '#' # n개만큼 출력할 특수문자
li = []
for i in range(n): # 1회 루프를 반복할 때마다 #을 list에 추가
li.append(spec)
return ''.join(li) # list 안의 #을 하나의 string으로 통합
if __name__ == '__main__':
n = int(input())
star = makestar(n)
print(star)
하지만 range를 쓰면 나중에 따로따로 떨어진 문자들을 합치기 위해 join을 반드시 써야 한다는 점이 번거롭습니다. 생각해보니 +(더하기)와 *(곱하기)를 잘 사용하면 더 간단히 코드를 짤 수 있더라고요.
star = '#'
print(star+star)
>> ##
print(star*5)
>> #####
space = ' '
print(space+star)
>> #
print((space*4)+star)
>> #
이걸 잘 활용하면 다른 문제를 풀 때도 유용하게 쓸 수 있을 것 같습니다.
늘 기초가 참 중요하네요.
'Algorithm > HackerRank' 카테고리의 다른 글
[HackerRank]Birthday Cake Candles(풀이 성공) (0) | 2021.02.01 |
---|---|
[HackerRank]Diagonal Difference(풀이 성공) (0) | 2021.01.28 |
[HackerRank]Compare the Triplets(풀이 성공) (0) | 2021.01.16 |
[HackerRank]Plus Minus(풀이 성공) (0) | 2021.01.10 |
[HackerRank]Mini-Max Sum(풀이 성공) (0) | 2021.01.06 |