억대 연봉을 위한 인간수업
Published 2022. 7. 7. 15:35
파이썬 - 별찍기 Develop/python
반응형

파이썬을 정말 오랜만에 손을대며.. 간단한 별찍기를 여러 방식으로 풀어보았다.

 

 


문제

N이 주어지면 다음과 같이 별(1)이 저장된 배열을 반환하는 프로그램을 작성하시오

N = 5

  012345678
0|    1
1|   111
2|  11111
3| 1111111
4|111111111
5| 1111111
6|  11111
7|   111
8|    1

 

 


풀이방식

풀이방식은 총 3가지를 생각해봤다.

 

 

1. 처음 생각

N = 5
A = N + N-1
arr = [[0]*A for i in range(A)]
p = 1
z = 2
x = -1
st = A//2
for c in range(0,A+1,1):
    for j in range(0, p, 1):
        arr[c][st+j] = 1
    p += z
    st += x
    if A//2 == c+1:
        st = 0
        z *= -1
        x *= -1

for i in arr:
    for j in i:
        print(j,end=" ")
    print()

여태 코딩말고 다른 일들을 하면 생기는 문제점 같은 부분인데, 문제를 간단하게 생각 못하고 복잡하게 생각한다.

그래서 for문을 이중으로 돌려서 처음 시작점을 나누기 2의 몫으로 잡앗서 별을 채운다는.. 위와 같은 코드를 작성했다.

그런데 보다보면 불필요한 변수나, 줄여서 간단하게 할 수 있는 부분이 존재한다.

그래서 2번 코드를 작성했다.

 

 

 

 

 

 

2. 1번 코드 수정

N = 5
A = N + N-1
arr = [[0]*A for i in range(A)]

p = 1
st = A//2
for c in range(N):
    for j in range(p):
        arr[c][st+j] = 1
    p += 2
    st -= 1

st = 0
for c in range(N, A+1):
    for j in range(p):
        arr[c][st+j] = 1
    p -= 2
    st += 1

for i in arr:
    for j in i:
        print(j,end=" ")
    print()

1번 코드는 별찍는걸 하나의 for문 안에 썻기때문에 조금 복잡하다.

그래서 이걸 개선해서 별이 증가할 때와 감소할때로 분리해, 두개의 for문으로 코드를 작성했다.

증가할 대는 st가 정 중앙에서 부터 점점 감소하다 배열의 끝까지 별을 채운경우 st가 감소해 마름모 모양을 찍어낼 수 있다. 

 

 

 

3. 좀 더 신선한 방법

N = 5
A = N + N - 1
arr = [[0]*A for i in range(A)]

center = N
for c in range(N):
	arr[c][center] = 1
	for j in range(c):
		arr[c][center-j] = 1
		arr[c][center+j] = 1

	arr[A-c-1][center] = 1
	for j in range(c):
		arr[A-c-1][center-j] = 1
		arr[A-c-1][center+j] = 1

1,2번은 시작점을 다르게 해서 별을 찍었고, 3번은 코드를 더 간결하게 하기 위한 방법이다.

배열의 시작과 끝은 정해져 있으므로, for문을 통해 위 아래에서 동시에 별을 찍을 수도 있다.

 

 

 

 

 

 

 

 

 

 

반응형

'Develop > python' 카테고리의 다른 글

크로아티아 알파벳(백준 2941번)  (0) 2022.07.01
Python과 DB 연동  (0) 2020.01.13
BeautifulSoup 사용법  (0) 2020.01.13
Requests 모듈 사용법  (0) 2020.01.13
[Python]모듈이란?  (0) 2020.01.07
profile

억대 연봉을 위한 인간수업

@회뜨는참치

이 글이 당신에게 조금이라도 도움이 된다면 좋겠습니다.