Python/Baekjoon

[Python / Baekjoon] 6단계 심화 1 # 2444 별 찍기 -7 백준 알고리즘 문제 풀이

Sukyung Jang 2023. 4. 19. 00:00

 

1. 2444 별 찍기 -7 문제


https://www.acmicpc.net/problem/2444

 

2444번: 별 찍기 - 7

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

백준 2444번 별 찍기 문제입니다.

전에도 별 찍는 문제를 풀었었는데 이번 문제는 제 수준에선 많이 어려웠습니다.

거의 2시간을 혼자 고민했었네요.

 

숫자가 주어지면 다이아몬드 형식으로 별을 찍는 문제입니다.

 

2. 풀이 과정


먼저 맨 처음 작성했던 코드를 보겠습니다.

  • 코드
N = int(input())
B = []

for i in range(1, N * 2, 2):
    star = '*' * i
    B.append(star) # 별 추가

for i in range(len(B)):
    print(B[i].center(N*2)) 

B.reverse() # 리스트 역순

for i in range(1, len(B)):
    print(B[i].center(N*2))

숫자를 넣을 변수 N과 빈 리스트인 B를 생성했습니다.

리스트 B는 별 들을 저장하기 위해서 생성했습니다.

 

이후 for 반복문을 이용해서 별을 찍으면서 B 리스트에 추가했습니다.

 

그 이후 for 반복문으로 출력하고 reverse() 함수를 이용해서 리스트를 뒤집은 다음 다시 출력했습니다.

중앙에서부터 출력할 수 있게 center()를 사용했습니다.

 

  • 출력

위의 코드로 출력한 모습입니다.

하지만 정답은 아니였습니다.

별을 찍은 이후에 \n 처리가 되어 넘어가야 하는데

제가 적은 코드는 center() 함수로 작성하여서 옆에 공백이 있는게 문제였습니다.

그래서 다시 코드를 작성했습니다.

 

  • 코드
N = int(input())
B = []

for i in range(1, N * 2, 2):
    star = '*' * i
    B.append(star) # 별 추가

for i in range(len(B)):
    print(' ' * (N - i) + B[i])

B.reverse()

for i in range(1, len(B)):
    print(' ' * (i + 1) + B[i])

이번 코드는 center() 함수를 이용하는 것이 아닌 공백 문자열을 더하는 방식으로 만들었습니다.

출력하는 과정만 차이를 두었습니다.

하지만 이번 코드도 틀렸습니다.

 

  • 출력

이번 코드에서 많은 어려움이 있었습니다.

아무리 봐도 뭐가 잘못되었는지 모르겠더라구요.

그래서 계속 드래그만 하다가 깨달았습니다.

5번째 줄에 찍은 별 왼쪽에 공백이 하나 있다는 것을 깨달았습니다.

그래서 다시 코드를 작성했습니다.

 

  • 정답 코드
N = int(input())
B = []

for i in range(1, N * 2, 2):
    star = '*' * i
    B.append(star) # 별 추가

for i in range(len(B)):
    print(' ' * (N - i - 1) + B[i])

B.reverse()

for i in range(1, len(B)):
    print(' ' * i + B[i])

그래서 다시 작성한 코드입니다.

이번에도 출력하는 방식에만 차이를 뒀습니다.

 

위의 오답 코드와 비교해보면 출력하는 방법이 다르다는 것을 알 수 있습니다.

 

  • 정답 출력

5번째 줄에 옆에 공백이 없어진 것을 볼 수 있습니다.

 

3. 결과


2번 틀린 후에 맞출 수 있었습니다.

제 실력에는 정말 쉽지 않은 문제였습니다.

 

지금까지 2444 별 찍기 -7 문제를 풀어봤습니다.

제가 정답을 맞추는 과정을 기록하는 글입니다.