개발자 피터
Peter's Dev Blog
개발자 피터
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • 🧑🏻‍💻 Develop (13)
      • Devops (3)
      • Elasticsearch (3)
      • Design Pattern (1)
      • SQL (4)
      • Architecture (1)
      • APM (1)
    • 💻 Service (7)
      • E-ROOM (3)
      • Briefing (4)
    • 💡 Problem Solving (43)
      • Baekjoon (40)
      • Programmers (2)
    • 📚 Reading (12)
      • Tech (9)
      • Self-Help (3)
    • 💬 Etc (1)
    • 📈 Retrospective (1)

블로그 메뉴

  • 🌟 깃허브
  • 🏷️ 태그 클라우드
  • 📝 방명록

공지사항

인기 글

태그

  • 백준
  • Programmers
  • SQL
  • elasticsearch
  • 구현
  • boj
  • 그리디
  • java
  • 백트래킹
  • 브루트포스
  • 독서
  • briefing
  • 문자열
  • MySQL
  • E-ROOM

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
개발자 피터

Peter's Dev Blog

💡 Problem Solving/Baekjoon

[백준 - 1051] 숫자 정사각형 [C++]

2021. 3. 14. 15:45
728x90
반응형

1. 문제

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

2. 풀이과정

N*M크기의 직사각형에서 만들 수 있는 모든 정사각형에 대해 

꼭짓점에 쓰여 있는 수가 모두 같은지 확인하며 정사각형 넓이의 최대값을 구해준다.

 

[코드설명]

check함수는 특정 점 (y, x)을 좌측상단 꼭짓점으로 하고

조건을 만족하는 정사각형의 넓이들 중 최대값을 반환해준다.

(조건 : 꼭짓점에 쓰여 있는 수가 모두 같아야 함)

 

가능한 모든 (y, x)조합에 대해 check함수를 이용해 탐색하여 해결한다.

3. 코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;
int n, m;
vector<string> board;
int result = -1;

bool safe(int y, int x) {
    return (0<=y && y<n) && (0<=x && x<m);
}

int check(int y, int x) {
    int area = 1;
    int key = board[y][x];
    int ny = y, nx = x;
    while(1) {
        if(!safe(ny, nx)) break;
        if(board[ny][nx] == key && board[y][nx] == key && board[ny][x] == key) area = (ny-y+1)*(ny-y+1);
        ny++;
        nx++;
    }
    return area;
}

int main()
{
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    cin >> n >> m;
    board.resize(n);
    for(int i=0; i<n; i++) {
        cin >> board[i];
    }
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            result = max(check(i, j), result);
        }
    }
    cout << result;
    return 0;
}
728x90
반응형
저작자표시 (새창열림)

'💡 Problem Solving > Baekjoon' 카테고리의 다른 글

[백준 - 23247] Ten [C++]  (0) 2023.10.13
[백준 - 1780] 종이의 개수 [C++]  (0) 2021.03.15
[백준 - 15988] 1, 2, 3 더하기 3 [C++]  (0) 2021.03.14
[백준 - 12101] 1, 2, 3 더하기 2 [C++]  (1) 2021.03.14
[백준 - 14500] 테트로미노 [C++]  (0) 2021.03.06
    '💡 Problem Solving/Baekjoon' 카테고리의 다른 글
    • [백준 - 23247] Ten [C++]
    • [백준 - 1780] 종이의 개수 [C++]
    • [백준 - 15988] 1, 2, 3 더하기 3 [C++]
    • [백준 - 12101] 1, 2, 3 더하기 2 [C++]
    개발자 피터
    개발자 피터
    Backend Engineer 🔥

    티스토리툴바