Python/프로그래머스

[프로그래머스 lv.1] 직사각형 별찍기

묘걍 2023. 8. 29. 16:46

문제

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

<제한 조건>

  • n과 m은 각각 1000 이하인 자연수입니다.

내가 생각한 풀이 방법

주어진 함수는 입력된 숫자들을 각각 나눠주는 함수이다. 두 수는 각각 a와 b에 대입된다.

사실 map 함수를 많이 안 써봐서 당황했다,,ㅎㅎ

아무튼 그 밑에 한 행 내에서 *을 a번 찍고

그것을 b번 반복하는 이중 for문을 만들면 될 것 같다

 

코드로 구현

1차 시도

a, b = map(int, input().strip().split(' '))
for i in range(b):
    for j in range(a):
        print('*')

- 개행을 안 해줘서 그런 것 같다

 

2차 시도

a, b = map(int, input().strip().split(' '))
for i in range(b):
    for j in range(a):
        print('*')
    print('\n')

- 이렇게 되면 한 행에 가로로 *을 출력하는 게 아니라 새로운 줄에 *를 출력하여 세로로 *이 찍히고 개행하고 또 세로로 *이 찍히고 의 반복이라고 한다.

- 한 줄에 찍으려면 end 옵션을 적어줘야한다!

 

3차 시도

a, b = map(int, input().strip().split(' '))
for i in range(b):
    for j in range(a):
        print('*', end='')
    print('\n')

- 마지막 개행을 안 하도록 고쳐야 하는 것 같다

 

4차 시도

a, b = map(int, input().strip().split(' '))
for i in range(b):
    for j in range(a):
        print('*', end='')
    if i != b:
        print('\n')

- 뭐가 문제냐..

 

5차 시도

a, b = map(int, input().strip().split(' '))
for i in range(b):
    for j in range(a):
        print('*', end='')
    if i != b-1:
        print()

- 일단 마지막 반복은 b-1이어야함

- print('\n')이 아니라 print()로 개행해야함

     → 이유: print('\n')의 경우는 빈 줄이 생긴다, print()가 말 그대로 개행이다.

 

다른 사람 풀이