JSITCLUB

파이썬 - 프로그래머스 - 직사각형 별찍기 본문

파이썬/문제풀이

파이썬 - 프로그래머스 - 직사각형 별찍기

jsitclub 2019. 12. 28. 23:31

프로그래머스 - level 1

문제 설명

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


제한 조건

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


예시

입력

5 3

출력

*****

*****

*****

 

 

코딩테스트 연습 - 직사각형 별찍기

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

programmers.co.kr

 

풀이 및 코드

 

먼저 문제풀이에 앞서 이 문제는 다른 프로그래머스 문제처럼 함수 형태가 아니고 두 개의 값을 입력받는 형태로 되어 있습니다. 참고하세요. (문제에서 n,m으로 이야기해서 변수명을 바꾸었습니다.)

n, m = map(int, input().strip().split(' '))

이 코드는 공백으로 구분하여 입력받은 두 값을 공백을 기준으로 잘라 각각 n와 m에 담는 코드입니다. 다른 알고리즘 사이트에서 두 개의 값을 받아야 할 때 자주 사용하는데, 대개는 다음과 같이 간단히 사용합니다.

n, m = map(int, input().split())

 

문제요약 

이 문제는 첫 번째 숫자(n) 개의 별을 두 번째 숫자(m)행 만큼 출력하는 문제입니다.

 

문제해설 

해결 방법은 다양한데,

  • *을 순서대로 출력하는 방법

  • *****을 만들어 임시 변수에 담고 임시 변수의 내용을 반복해서 출력하는 방법

  • 중첩 반복문을 사용하는 방법

  • 파이썬의 문자열 곱셈을 사용하는 방법

등이 있습니다.

 

결과코드

1. * 을 순서대로 출력하는 방법

이 방법은 *을 n*m만큼 찍다가 n이 배수 번째 일 때 줄 바꿈을 해주는 방법입니다.

 

n, m = map(int, input().strip().split(' '))

for i in range(1,n*m+1):
    print('*',end='')

    if i % n==0:
        print()

2. *****을 만들어 임시 변수에 담고 임시 변수의 내용을 반복해서 출력하는 방법

n, m = map(int, input().strip().split(' '))

a=''
for i in range(n):
    a=a+'*'

for i in range(m):
    print(a)

3. 중첩 반복문을 사용하는 방법

n, m = map(int, input().strip().split(' '))

for i in range(m):

    a=''
    for j in range(n):
        a=a+'*'
    print(a)

4. 파이썬의 문자열 연산 이용하는 방법

n, m = map(int, input().strip().split(' '))

print(('*'*n+'\n')*m)

 

1,2,3번 방법은 다른 언어에서도 사용 가능한 방법이지만, 4번 방법은 파이썬의 장점을 최대한 살린 방법입니다. 편리해 보이긴 하지만, 너무 파이썬에 자신의 코딩 스타일을 맞추면, 언어마다 생각하는 방식이나 코딩 스타일이 달라져야 하므로 일반적인 방법을 익히시기 바랍니다. 또한 파이썬의 방식으로 너무 줄여버리면 가끔은 코드가 암호수준이 되는 경우가 있어 코드를 짧게 만드는것에 너무 연연하지 마세요. 오죽하면 "읽기좋은코드가 좋은코드다" 책 까지 있겠습니까. 

특별히 3번 중첩 반복문을 사용하는 방법은 다른 문제에서도 자주 사용되므로 잘 기억해 두세요.

수고하셨습니다. 

Comments