알고리즘 모음(C++)

백준 23055 - 공사장 표지판(C++) 본문

백준

백준 23055 - 공사장 표지판(C++)

공대생의 잡다한 사전 2022. 3. 25. 02:44

문제 링크입니다. https://www.acmicpc.net/problem/23055

 

23055번: 공사장 표지판

신입생 백남이는 넓은 충남대학교를 돌아다니다 보니 건물을 새로 짓느라 공사를 하는 곳을 많이 보았다. 공사장은 위험한 요소들이 많아 백남이가 다칠 수도 있기 때문에 백남이가 들어가지

www.acmicpc.net

간단한 구현 문제입니다.

X를 만들면 쉽게 풀 수 있는 문제입니다.

먼저 '*'이 어디서 나왔는지를 확인해야합니다.

 

1. 1번째 행과 마지막 행에서는 '*'이 전부 나옵니다.

2. 1번째 열과 마지막 열에서는 '*'이 전부 나옵니다.

-> 큰 사각형의 '*'을 만들 수 있습니다.

 

이번에는 사각형 안에 있는 '*'에 대해서 생각해보겠습니다.

사각형의 가장 왼쪽 위를 (1,1) / 오른쪽 아래를 (N,N) 이라고 가정하겠습니다.

그렇다면 모든 곳을 (X,Y)로 나타낼 수 있습니다.

 

1. X == Y 일때 별이 나타난다.

2. X + Y - 1 == N 인 경우 별이 나타난다.

-> 큰 X모양의 '*'을 만들 수 있습니다.

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <cmath>
#define INF 98765432100

using namespace std;

int N;
 
void solve() {
	for (int i = 1; i <= N; i++) {
		if (i == 1 || i == N) {
			for (int j = 1; j <= N; j++) {
				cout << "*";
			}
		}
		else {
			for (int j = 1; j <= N; j++) {
				if (j == 1 || j == N) cout << "*";
				else if (i == j) cout << "*";
				else if (i + j - 1 == N) cout << "*";
				else cout << " ";
			}
		}
		cout << "\n";
	}
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	solve();
	return 0;
}

 

 

질문 및 조언은 댓글 남겨주세요