[백준 BOJ] 2446번 별 찍기 - 9 (C++/cpp)

2022. 10. 13. 14:34PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/2446

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

백준 BOJ 2446번 별 찍기 - 9 문제 사진

 

접근 방법 - 이중 반복문을 이용한 출력 응용문제 (별 찍기-7 문제의 변형)

백준의 2446번 문제는 이중 반복문을 통해 출력문을 제어해야 하는 문제이다.

해당 문제는, 입력값에 대해 규칙적으로 별을 출력하여 해결해야 하는 문제이다.

이와 비슷한 유형의 문제에 대하여 이전에 작성한 ps글이 있는데, 이 글의 링크를 아래에 기재해놓았다.

이 유형에 어색하다면, 아래 링크도 함께 참고해보면 좋을 것이다.

https://smary-it.tistory.com/29

 

[백준 BOJ] 2444번 별 찍기 - 7 (C언어)

문제 설명 https://www.acmicpc.net/problem/2444 2444번: 별 찍기 - 7 첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. www.acmicpc.net 접근 방법 - 이중 반복문을 이용한 응용 문제 (별 찍기-5, 별 찍..

smary-it.tistory.com

해당 문제 자체에 대한 해설이라면 아래에 자세히 기재되어있다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.

(사실 설명만 보면 이해가 잘 안 갈 수도 있기 때문에, 직접 시뮬레이션하면서 출력 결과를 추적해보는 방법을 추천하고 싶다.)

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 값(n)을 입력받는다.

 

2) 반복문을 실행하여 아래의 연산을 취한다. (i: 행, j: 열)

(이때, i는 1부터 n*2 전까지 하여 n*2-1개의 행을 출력하도록 한다.)

- 임의의 변수 cnt를 i로 초기화하여 선언한다. 이 cnt로 현재 행에 대한 열 출력을 제어할 예정이다.

이때 cnt가 n보다 크다면 현재 행이 중간 행을 넘어섰음을 뜻하기 때문에, 대칭적으로 출력이 되도록 cnt의 값을 n*2-1로 다시 설정한다.

- 공백을 출력하는 반복문을 실행한다.

행이 중앙으로 향할수록 더 많이 출력되야하기 때문에, j가 1부터 cnt 전까지 하여 공백을 출력하도록 한다.

- 별을 출력하는 반복문을 실행한다.

출력되는 별이 홀수 개이며 인접한 행끼리 출력이 2개씩 차이가 난다. 또한 중앙으로 향할수록 별을 더 적게 출력해야 한다.

따라서, cnt부터 하여 n*2-cnt까지 하여 별을 출력하도록 한다.

(여기서, cnt는 해당 행에서 출력한 공백의 개수라 생각하면 된다.)

- 위 2개의 반복문이 종료될 때마다 개행을 출력하고, 다음 행에 대한 연산을 수행한다.

 

3) 출력이 모두 완료되었다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 2446번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 1; i < n * 2; i++) {
		int cnt = i;
		if (cnt > n) {
			cnt = n * 2 - i;
		}

		for (int j = 1; j < cnt; j++) {
			cout << " ";
		}
		for (int j = cnt; j <= n * 2 - cnt; j++) {
			cout << "*";
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 2446번 별 찍기 - 9 문제 C++ 제출 결과

(2022.07.28 백준 2446번 문제 제출 결과)

반응형