『목차』
0. 개요
1. 문제
2. 풀이
3. 코드
0. 개요
오랜만에 풀어보는 별찍기 문제. 처음 C언어 배울 때는 이 문제도 그렇게 어려웠는데, 이제는 쉽게 풀린다. 물론 뒤로 갈수록 띠용한 문제들도 많지만, 평범한 별찍기는 뭐...ㅎ
1. 문제
https://www.acmicpc.net/problem/2442
2442번: 별 찍기 - 5
첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.
www.acmicpc.net
[문제]
첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제
별은 가운데를 기준으로 대칭이어야 한다.
[입력]
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
[출력]
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
[예제 입력 1]
5
[예제 출력 1]
*
***
*****
*******
*********
2. 풀이
출력을 잘 살펴보면 코드는 크게 3부분으로 나뉜다.
1. 공백 찍기
2. 별 찍기
3. 개행
위의 세 부분을 하나로 합치면, 한 줄이 찍히는 것이다.
별찍기의 경우 반복문의 중첩을 이용하는 경우가 많다. 게다가 각각의 반복문 변수들이 서로 영향을 주고받으며 코드가 구성되기 때문에, 변수들이 어떻게 얽힌 건지, 코드가 어떻게 구성된 건지 한눈에 파악하기 어렵다. 그렇기에, 큰 구조를 작은 부분으로 세세히 나눠가며 문제를 순서대로 풀어나가야지, 코드가 꼬이지 않고 쉽게 풀어나갈 수 있다.
[1. 공백 찍기]
공백의 개수를 확인해 보면, 입력이 5[n]일 때
4 [n-1]
3 [n-2]
2 [n-3]
1 [n-4]
0 [n-5]
의 순서로 공백이 찍힌다.
[2. 별 찍기]
별의 개수를 확인해 보면, 입력이 5[n]일 때
1 [2*(n-4)-1]
3 [2*(n-3)-1]
5 [2*(n-2)-1]
7 [2*(n-1)-1]
9 [2*(n-0)-1]
의 순서로 공백이 찍힌다.
[3. 개행]
코드의 맨 마지막에는 개행을 넣어줘야 줄이 다음줄로 바뀐다.
위 내용을 코드로 구현하면 아래와 같다. i 와 j와 n의 관계를 유심히 살펴보자.
3. 코드
#pragma warning (disable:4996)
#include <stdio.h>
int main(int argc, char* argv[]) {
int n; scanf("%d", &n);
for (int i = 1; i <= n; i++) {
/* 공백 찍기 */
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
/* 별 찍기 */
for (int j = 1; j <= (2 * i) - 1; j++) {
printf("*");
}
/* 개행 */
printf("\n");
}
return 0;
}
'⌨️CS-PS > 백준_수학&구현' 카테고리의 다른 글
[Baekjoon/백준][2444][C/C++] 별 찍기 - 7 (0) | 2023.01.19 |
---|---|
[Baekjoon/백준][2443][C/C++] 별 찍기 - 6 (0) | 2023.01.19 |
[Baekjoon/백준][5597][C/C++] 과제 안 내신 분..? (0) | 2023.01.19 |
[Baekjoon/백준][10807][C/C++] 개수 세기 (0) | 2023.01.18 |
[Baekjoon/백준][1110][C/C++] 더하기 사이클 (0) | 2023.01.17 |