[알고리즘] 직사각형 별찍기

DongGyu Jung·2021년 10월 3일
0
post-thumbnail

※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.

❓ 문제

이 문제에는 표준 입력으로 
두 개의 정수 n과 m이 주어집니다.

별(*) 문자를 이용해
가로의 길이가 n, 세로의 길이가 m인 
직사각형 형태를 출력해보세요.

제한 조건 : n과 m은 각각 1000 이하인 자연수입니다.

❗ 풀이

My Code

a, b = map(int, input().strip().split(' '))

if a > 1000 or b > 1000:
    print("제한조건에 의해 실행할 수 없습니다.")
else :
    for _ in range(b):
        print(a*"*")

민망하게도 다른 분들은 제한조건에 대한 코드는 없었다...
(안해도 되는 부분인데 괜히 경우의 수를 만들어 코드가 길어진거겠지..?)

처음 파이썬을 배울 때,
for문 예제로 가장 많이 나오는 유형이 별 찍기라고 느껴질만큼 다양한 모양의 별을 찍었다.
정삼각형, 직사각형 등등..

그래서 추억을 되새기며 for문으로 print() 함수를 활용해 해결했다.

추가적으로 map()이라는 입력값을 목적에 맞게 묶어서 조절하는 함수와
input()함수의 하위 함수인 .strip()split()함수에 대해 알 수 있었다.

❣ 다른 풀이

(1)

a, b = map(int, input().strip().split(' '))
answer = ('*'*a +'\n')*b
print(answer)

깔끔하다..!!
단, 해당 방법을 조금 생각해보니 마지막 \n이 함께 출력되는 바람에
결과를 출력했을 때,
보이지 않는 빈 줄이 가장 밑 줄에 위치하게 된다.

(2)

a, b = map(int, input().strip().split(' '))

for i in range(b):
    for j in range(a):
        print('*', end='')
    print('')

필자는 개인적으로 위의 코드보다 결과물은
end=''인자로 "*" 간의 간격을 좁혀주고
내부 for문 마지막에 print('')로 마무리하여 바람직하다고 생각하지만

비교적 계산 단계가 많아지고 코드가 길어진 것 같다.

0개의 댓글