본문 바로가기
문제/백준

c++ 백준_23562_"ㄷ 만들기"

by 나 진짜 못차마 2023. 6. 16.
728x90

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

 

23562번: ㄷ 만들기

2021년, 냅다 ㄷ 만들기는 한국인의 기본 소양이 되었다. 우리는 앞에 놓여있는 $n \times m$ 모눈종이에 냅다 ㄷ을 그리려 한다. ㄷ 모양은 $k \times k$ 정사각형 7개를 붙인 형태로 정의한다. 다음은

www.acmicpc.net

 

ㄷ 이 칸을 3k 씩 사용하고

n,m 의 최대가 20 이니

K = 1 ,2 , 3 , 4, 5, 6

까지의 경우를 브루트포스 했다.

#include <iostream>
#include <vector>
using namespace std;

#define INF 1000000000

int n,m,a, b;

int Dee(vector<vector<char>> page,int k,int row,int col) {


	if (row + (3 * k - 1) >= n || col + (3 * k - 1) >= m)
		return INF;

	int cost = 0;
	vector<vector<bool>> check(n, vector<bool>(m, false));

	for (int i = 0; i < 3*k; i++) {
		for (int j = 0; j < 3*k; j++) {
			

			if (k <= i && i < 2 * k) { // ㄷ 자 안쪽 부분
				if (j < k) {
					if (page[row + i][col + j] == '.') {
						cost += a;
					}
				}
				else {
					if (page[row + i][col + j] == '#') {
						cost += b;
					}
				}
			}
			else {
				if (page[row + i][col + j] == '.') { 
					cost += a;
				}
			}
			
			check[row + i][col + j] = true;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (!check[i][j]) {
				if (page[i][j] == '#') {
					cost += b;
				}

			}
		}
	}

	return cost;
}


int main(void) {

	
	cin >> n >> m;
	cin >> a >> b;


	vector<vector<char>> page(n, vector<char>(m));
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> page[i][j];
		}
	}

	int ans = INF;
	for (int k = 1; k <= 6; k++) {

		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				int cost = Dee(page, k, i, j);
				if (ans > cost) {
					ans = cost;
				}
			}
		}
	}
	cout << ans;

}

728x90

'문제 > 백준' 카테고리의 다른 글

c++ 백준_1753_"최단경로"  (0) 2023.06.16
c++ 백준_2252_"줄 세우기"  (0) 2023.06.16
c++ 백준_1600_"말이 되고픈 원숭이"  (0) 2023.06.15
c++ 백준_1405_"미친 로봇"  (0) 2023.06.15
c++ 백준_1715_"카드 정렬하기"  (0) 2023.06.15