728x90
반응형
https://www.acmicpc.net/problem/2444
2444번: 별 찍기 - 7
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
문제 해결 아이디어
1. 내 구현 코드를 여러번 확인해가면서 문제를 풀었음.
2. for문 한번에 해결할 수 있지 않을까 라는 물음에서 규칙성을 찾기 위해 노력함.
3. ans라는 문자열 변수를 선언하여 공백과 별을 추가한 후 출력
4. n이 주어졌을 때, 출력되는 행의 수는 2n-1임. (5를 입력하면 9줄이 출력돼야함.)
5. n번째 행을 기점으로 별의 수는 감소. 공백은 증가
6. n을 기준으로 n보다 작거나 같을 때의 규칙, n보다 클때의 규칙을 고민해봄.
7. n=5를 예시로 규칙 찾아보기
*
***
*****
*******
*********
*******
*****
***
*
회차 (n=5) | 공백 | 별 |
1 | 4 (5-1) | 1 (2x1 -1) |
2 | 3 (5-2) | 3 (2x2 -1) |
3 | 2 (5-3) | 5 (3x2 -1) |
4 | 1 (5-4) | 7 (4x2 -1) |
5 | 0 (5-5) | 9 (5x2 -1) |
6 | 1 (6-5) | 7 (2x(2x5-6)-1) |
7 | 2 (7-5) | 5 (2x(2x5-7)-1) |
8 | 3 (8-5) | 3 (2x(2x5-8)-1) |
9 | 4 (9-5) | 1 (2x(2x5-9)-1) |
요상한 식이 세워졌다..
이 식이 나오게 된 이유는 시행착오 단계에서 n보다 클때 2n-i을 별에 곱했을 때 다음과 같은 결과가 나왔다.
*
***
*****
*******
*********
****
***
**
*
2n-i의 2배에서 1을 빼면 되지 않을까 라고 생각하여 다음과 같은 소스코드를 작성하였다.
소스코드 (Python)
def stars(n):
for i in range(1, 2*n):
ans = ''
if i <= n:
ans += (n-i)*' '+'*'*(2*i-1)
else:
ans += (i-n)*' '+'*'*(4*n-2*i-1)
print(ans)
if __name__ == '__main__':
stars(int(input()))
for문 한번에 별을 찍을 수 있게 되었음. ㅎㅎ
결과
굿굿
반응형
'코딩테스트' 카테고리의 다른 글
[백준] 2738번: 행렬 덧셈 (브론즈5, Python) (0) | 2023.08.03 |
---|---|
[백준] 2566번: 최댓값 (브론즈3, Python) (0) | 2023.08.02 |
[백준] 25206번: 너의 평점은 (실버5, Python) (0) | 2023.07.31 |
[프로그래머스] 멀리 뛰기 (lv1, Python) (0) | 2023.07.27 |
[백준] 5597번: 과제 안 내신 분..? (브론즈5, Python) (0) | 2023.07.27 |