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 문제를 풀어봤습니다.
제가 정답을 맞추는 과정을 기록하는 글입니다.