본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 1051/c++] 숫자 정사각형

by tokkiC 2022. 6. 29.

정사각형 모양의 크기를 모두 구해서

그 중 가장 큰 것을 답으로 리턴하는 문제였다

0의 크기를 가질때 1로 바꿔주는 예외만 추가하면 됐다

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

 

1051번: 숫자 정사각형

N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;


int main(){
	
	int n, m, num, r, tok;
	int ans=-1;
	string s;
	cin >> n >> m;
	vector<int> v;
	
	int ar[n][m];
	
	for(int i=0; i<n; i++){		
		cin >> s;
		for(int j=0; j<m; j++){
			ar[i][j]=(int)s[j]-'0';
		}
	}
	
	
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			for(int k=m-1; k>j; k--){
				if(ar[i][j]==ar[i][k]){
					num=ar[i][j];
					r=k-j;
					if(i+r<n){
						if((ar[i+r][j]==num) && (ar[i+r][k]==num)){
						ans=(r+1)*(r+1);
						v.emplace_back(ans);
						}
					}
				}
			}
		}
	}
	tok=*max_element(v.begin(), v.end());
	if(v.size()==0){
		tok=1;
	}
	if(tok==0){
		tok=1;
	} 	
	cout << tok << "\n";
		
	return 0;
}

댓글