[백준 BOJ] 23806번 골뱅이 찍기 - ㅁ (C++/cpp)

2023. 11. 22. 23:52PS (Program Solving)/BOJ (백준)

문제 설명

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

 

23806번: 골뱅이 찍기 - ㅁ

서준이는 아빠로부터 골뱅이가 들어 있는 상자를 생일 선물로 받았다. 상자 안에는 ㅁ자 모양의 골뱅이가 들어있다. ㅁ자 모양은 가로 및 세로로 각각 5개의 셀로 구성되어 있다. 상자에는 정사

www.acmicpc.net

백준 BOJ 23806번 골뱅이 찍기 - ㅁ 문제 사진

 

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

백준의 23806번 문제는 이중 반복문을 활용하여 해결할 수 있는 문제이다.

해당 문제는, 입력값에 따라 특정 규칙을 이용하여 "@"를 통해 ㅁ 형태로 그리는 프로그램을 구현해야 하는 문제이다.

필자는 ㅁ에 있어, 윗부분 / 중간 부분 / 밑부분처럼 3개의 구역으로 나누어서 출력을 수행하게끔 하였다.

(n은 입력값을 나타낸다.)
- ㅁ의 "윗부분"은, n개의 "@@@@@"를 n줄만큼 출력해야 한다.
- ㅁ의 "중간 부분"은, 양 옆으로 각각 n개의 "@"와 중간으로 n*3개의 " "(공백)을 n*3줄만큼 출력해야 한다.
- ㅁ의 "밑부분"은, n개의 "@@@@@"를 n줄만큼 출력해야 한다. ("윗부분" 출력과 동일하다.)

단순 글로 패턴 설명을 해보았으나, 예제 입력에 있는 내용들을 잘 살펴본다면 규칙을 쉽게 찾을 수 있을 것이다.

여하튼, 필자는 위의 내용을 기반으로 하여 코드를 작성하였다.

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

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

 

코드의 실행 순서

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

 

2) 아래 코드를 활용하여, ㅁ의 윗부분을 출력한다.

"여기에선, n*5개의 "@"를 n줄에 걸쳐 출력을 수행해야 한다."

따라서 2중 반복문을 통해, 한 줄에 n번의 "@@@@@"를 출력하게끔 하고 한 줄씩 줄 바꿈을 수행하면서 총 n줄을 출력하도록 한다.

 

3) 아래 코드를 활용하여, ㅁ의 중간 부분을 출력한다.

(여기는 설명이 오히려 어려운 감이 있어, 코드와 함께 설명을 참고하거나 코드만 확인하는 것을 추천한다.)

"여기에선, n개의 "@" - n*3개의 " "(공백) - n개의 "@"를, n*3개 줄에 걸쳐 출력을 수행해야 한다."

따라서 하나의 반복문 안에, 위 3가지 부분을 각각 출력하는 3개의 반복문을 나열하여 원활히 출력하도록 한다.

그리고 한 줄씩 줄 바꿈을 수행하면서 총 n*3줄을 출력하도록 한다.

 

4) 아래 코드를 활용하여, ㅁ의 밑부분을 출력한다. ( 사실상 2의 출력 코드와 동일하다.)

"여기에선, n*5개의 "@"를 n줄에 걸쳐 출력을 수행해야 한다."

따라서 2중 반복문을 통해, 한 줄에 n번의 "@@@@@"를 출력하게끔 하고 한 줄씩 줄 바꿈을 수행하면서 총 n줄을 출력하도록 한다.

 

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

반응형

 

성공한 코드

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

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

	int n;
	cin >> n;
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << "@@@@@";
		}
		cout << endl;
	}
	for (int i = 0; i < n * 3; i++) {
		for (int j = 0; j < n; j++) {
			cout << "@";
		}
		for (int j = 0; j < n * 3; j++) {
			cout << " ";
		}
		for (int j = 0; j < n; j++) {
			cout << "@";
		}
		cout << endl;
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << "@@@@@";
		}
		cout << endl;
	}
}

 

제출 결과

백준 BOJ 23806번 골뱅이 찍기 - ㅁ 문제 C++ 제출 결과

(2022.10.31 백준 23806번 문제 제출 결과)

반응형