백준 2445은 별 찍기 - 8 문제입니다.
https://www.acmicpc.net/problem/2445
[ 별 문제 쉽게 푸는 법 TIP ]
1. 공백에 주의하자.
1) 쓸데 없는 공백이 있는지 확인하자. - '출력 형식이 잘못되었습니다'
백준 문제풀이에서는 쓸데 없는 공백을 출력할 경우 위와 같은 경고문을 띄운다.
전체적으로는 문제가 없어 보이더라도 꼼꼼이 확인해줘야 한다.
2) 별의 위치를 바꿔주기 위한 공백만 출력하도록 하자
코드를 짜다 보면, 별의 위치와 관련 없는 오른쪽 공백까지 출력하도록 코드를 짜게 되는 경우가 있다.
이 또한 '쓸데 없는 공백'으로 인식하여 '출력 형식이 잘못되었습니다'를 띄울 수 있다.
3) 공백은 임시로 'O'으로 출력되게 하자
위 1)과 2)의 문제를 해결하기 위한 방법으로 O나 #과 같은 문자로 가시적인 표현을 하면 된다.
다시 말해, printf(" "); 대신, printf("O");로 먼저 공백의 위치를 확인 후 printf(" ");로 바꿔주기만 하면 된다.
2. 반복문 설정에 주의하자.
1) 반복문의 큰 틀은 줄(Line)이다.
for(int i=0; i<n; i++){
각 줄마다의 출력으로 접근
}
2) C/C++의 for 반복문의 경우, 변수를 미리 선언할 건지, 반복문 내에서 설정할 건지 결정하자.
int i, ... ;
for(i=0; i<n; i++){ // 미리 선언한다면, 변수의 값을 초기화하지 않고 값을 필요에 따라 적절히 활용 가능
for(int k=0; k< .... // 각 반복문마다 선언한다면, 변수의 값을 초기화함으로써 n차 반복문의 'n차 구분'의 의미로 활용 가능
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int k = 0; k < i + 1; k++)
printf("*");
for (int k = 0; k < 2 * (n - i - 1); k++)
printf(" ");
for (int k = 0; k < i + 1; k++)
printf("*");
printf("\n");
}
for (int i = 1; i < n; i++) {
for (int k = n - i; k > 0; k--)
printf("*");
for (int k = 0; k < 2 * i; k++)
printf(" ");
for (int k = n - i; k > 0; k--)
printf("*");
printf("\n");
}
return 0;
}
풀이에 오류가 있거나 빈약한 부분이 있다면 얼마든지 댓글 남겨주시기 바랍니다.
https://like-a-happy-cat.tistory.com/
'프로그래밍 > 백준' 카테고리의 다른 글
[C/C++] 백준 2522 별 찍기 - 12 (0) | 2022.06.07 |
---|---|
[C/C++] 백준 2446 별 찍기 - 9 (0) | 2022.06.07 |
[C/C++] 백준 2444 별 찍기 - 7 (0) | 2022.06.07 |
[C/C++] 백준 2443 별 찍기 - 6 (0) | 2022.06.07 |
[C/C++] 백준 2442 별 찍기 - 5 (0) | 2022.06.07 |