728x90
문제출처:https://www.acmicpc.net/problem/10992
10992번: 별 찍기 - 17
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
1. 코드
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
//전체적으로 트리모양 *제외하고 공백줄때
for (int j = 1; j <=n- i; j++) {
printf(" ");
}
if (i == 1 || i == n) {
//첫줄이랑 마지막줄일때 *찍기
for (int j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
}
else {
//첫줄, 마지막줄 제외하고 공백을 만들어주면서 *찍기
printf("*");
for (int j = 0; j < 2 * i - 3; j++) {
printf(" ");
}
printf("*");
}
printf("\n");
}
}
2. 해결 과정
기본적으로 트리모양으로 *찍기 문제에서 첫번째 줄과 마지막줄을 제외하고 가운데 줄들의 *을 찍을 때 중간의 공백을 주는 문제이다.
전체적인 규칙이 있을 것 같은데 잘 모르겠어서,,, 첫줄과 마지막 줄은 기존 그대로 *을 찍어 주었고, else로 가운데 줄은 따로 공백을 만들어 주었다.
만약에 처음에 입력받은 수를 3이라고 하면, 2번째 줄의 줄은 O*O*O으로 표현되어야한다. 따라서 공백은 2i-3일때 공백임을 알 수 있다.
3. 느낀점
가운데 줄의 공백을 만들어주는 것이 생각보다 어려웠고, 더 편한 규칙이 있을 것같은데 그것을 찾기 위해서 노력을 해야할 것같다.
728x90
'공부 자료 > 알고리즘' 카테고리의 다른 글
(C/C++) 백준 7600번 - 문자가 몇갤까 (0) | 2021.07.05 |
---|---|
(C/C++) 백준 2711번 - 오타맨 고창영 (0) | 2021.07.05 |
(C/C++) 백준 1244번- 스위치 켜고 끄기 (0) | 2021.07.04 |
(C/C++) 백준 1748번- 수 이어쓰기 (0) | 2021.07.03 |
(C/C++) 백준 2442번 - 별찍기 (0) | 2021.07.03 |