본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 숫자 정사각형 1015 (Javascript, c++)

by Cafe Mocha 2022. 6. 9.

1051번: 숫자 정사각형 (acmicpc.net)

 

1051번: 숫자 정사각형

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

www.acmicpc.net


접근 방법

1. 박스 사이즈는 2~min(N,M)값 까지 증가하며 확인. 맞는값이 없을 경우 기본값 1

2. 2중 for문을 통해 전체 map 탐색(범위는 n,m -size이하)

3. 각 모서리의 값이 같으면 ans에 size 값을 대입


Javascript

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split("\n")
    .map((val) => val.trim());

  //input
  let [n, m] = input.splice(0, 1)[0].split(" ");
  let square = [];
  for (let i = 0; i < n; i++) {
    square.push(input[i].split("").map((v) => +v));
  }
  let min = Math.min(n, m);

  let ans = 1;
  for (let size = 2; size <= min; size++) {
    for (let i = 0; i <= n - size; i++) {
      let end = size - 1;
      for (let j = 0; j <= m - size; j++) {
        let tmp = square[i][j];
        if (square[i][j + end] === tmp && square[i + end][j] === tmp && square[i + end][j + end] === tmp) {
          ans = size;
          break;
        }
      }
    }
  }

  console.log(ans * ans);
}

solution();

 


C++

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



int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n,m;
    cin>>n>>m;

    vector<string> square;
    for(int i=0;i<n;i++){
      string tmp;
      cin>> tmp;
      square.push_back(tmp);
    }

    int s_min = min(n, m);

  int ans = 1;
  for (int size = 2; size <= s_min; size++) {
    for (int i = 0; i <= n - size; i++) {
      int end = size - 1;
      for (int j = 0; j <= m - size; j++) {
        int tmp = square[i][j];
        if (square[i][j + end] == tmp && square[i + end][j] == tmp && square[i + end][j + end] == tmp) {
          ans = size;
          break;
        }
      }
    }
  }

    
  cout<<ans*ans<<"\n";



  return 0;
}