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

Kim Nahyeong·2022년 2월 17일
0

백준

목록 보기
89/157

#include <iostream>
#include <algorithm> // min
using namespace std;

int N, M, n = 1;
int map[51][51]; // 입력값 - 자동으로 -1로 초기화 불가능
int main() {
  scanf("%d %d", &N, &M);

  for(int i = 0; i <50; i++){
    for(int j = 0; j < 50; j++){
      map[i][j] = -1; // -1로 초기화
    }
  }

  for(int i = 0; i < N; i++){
    for(int j = 0; j < M; j++){
      scanf("%1d", &map[i][j]); // 숫자 1개씩 받기
    }
  }

  for(int i = 0; i < N; i++){
    for(int j = 0; j < M; j++){
      for(int k = 1; k < min(N,M); k++){ // N이나 M중 작은것
        // if(map[i][j] == -1 || map[i+k][j] == -1 || map[i][j+k] == -1 || map[i+k][j+k] == -1){
        //   continue;
        // }
        if(i + k < N && j + k < M && map[i][j] == map[i+k][j] && map[i][j] == map[i][j+k] && map[i][j] == map[i+k][j+k]){
          // printf("%d %d %d\n", i, j, k);
          n = max(n, k+1);
        }
      }
    }
  }

  printf("%d", n * n);

  return 0;
}

6번이나 틀려서 고친 문제...
아니 -1로 초기화를 했는데 그러면 해당 값이 -1이면 범위를 초과한거니까 아 범위를 넘어갔구나! continue 해야지 라는 생각을 해야하는거 아닌가? 계속 오류는 나고, 어떤 input값을 넣어도 작동은 잘 되는데 계속 틀렸습니다. 가 떠서 정신 나갈 뻔 했어...ㅜㅜ
아직도 잘 모르겠다. 하나 막히면 아예 새로운 길을 뚫어야한다는 생각을 가져야할 것 같다.

그래도 브루트포스 알고리즘 정말 싫어하고 두려워했는데 이제 조금씩은 풀 수 있어서 다행이야. 실버3인데 실제로는 쉽게 접근할 수 있었다.

0개의 댓글