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

2022. 3. 31. 00:45PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2445번: 별 찍기 - 8

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

www.acmicpc.net

백준 BOJ 2445번 별 찍기 - 8 문제 사진

 

접근 방법 - 이중 반복문을 이용한 응용 문제

백준의 2445번 문제는 이중 반복문을 응용하여 해결해야 하는 문제이다.

해당 문제와 비슷한 문제에 대하여 이전에 필자가 작성한 글이 있다.

해결법을 찾는 데에 많은 어려움이 있었다면, 아래의 글도 함께 참고해보길 바란다.

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

이 문제의 경우에도 가운데 행을 중심으로 하여, 2가지의 경우로 나누어 출력을 수행하는 것이 좋다.

(이번 문제에선, for문을 2번 사용하지 않고 특정 변수를 통해 출력을 제어하도록 하였으니 이 점 유의하길 바란다.)

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

 

코드의 실행 순서

1) 숫자(n)를 입력받는다.

 

2) 이중 반복문을 실행한다. (i: 행, j: 열)

- cnt를 선언한 뒤, i의 값에 따라서 값을 결정한다.

i가 n보다 작거나 같다면, i를 그대로 저장한다. 하지만 i가 n보다 크다면, n*2에서 i를 뺀 값을 저장한다. 

- 다른 반복문을 통해 출력을 실행한다.

제어 변수 j의 값이 1과 n*2 사이에 있을 때에만 해당 반복문을 실행하도록 하며, j는 반복문이 실행될 때마다 1씩 증가한다.

j의 값이 cnt보다 크면서 n*2에 cnt를 뺀 값보다 작거나 같다면, 공백을 출력한다. 하지만 아니라면, *을 출력한다.

(코드 상에선 조건문이 반대로 작성되어있다. 헷갈리지 않도록 유의한다.)

- 개행을 적절히 하면서 출력을 계속한다.

 

3) 이중 반복문이 모두 수행되면, 실행 종료한다.

반응형

 

성공한 코드

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

//백준 2445번 코드
int main() {
	int n;
	cin >> n;
	
	for (int i = 1; i < n * 2; i++) {
		int cnt;
		if (i <= n) { cnt = i; }
		else { cnt = n * 2 - i; }

		for (int j = 1; j < n * 2 + 1; j++) {
			if (j <= cnt || j > n * 2 - cnt) {
				cout << '*';
			}
			else { cout << ' '; }
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 2445번 별 찍기 - 8 문제 C++ 제출 결과

(2022.02.27 백준 2445번 문제 제출 결과)

반응형