๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Coding Test/๋ฐฑ์ค€(BOJ)

[BOJ] ๋ฐฑ์ค€ #1051. ์ˆซ์ž ์ •์‚ฌ๊ฐํ˜• (C++)

๐ŸŽจ ๋ฌธ์ œ

๋ฌธ์ œ ๋งํฌ: https://www.acmicpc.net/problem/1051

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜: ๊ตฌํ˜„, ๋ธŒ๋ฃจํŠธํฌ์Šค
  • ๋‚œ์ด๋„: Silver 3

 

๐Ÿ’ฌ ํ’€์ด

๋˜ ์€๊ทผ ๊ตฌํ˜„์ด ๊นŒ๋‹ค๋กœ์› ๋˜ ๋ฌธ์ œ

  1. ํ•œ ๊ธ€์ž์”ฉ ์ž…๋ ฅ๋ฐ›๊ธฐ โ€• scanf() ์‚ฌ์šฉ
  2. ๋‹ฅ์น˜๊ณ  ์ด์ค‘for๋ฌธ ๋Œ๋ฆฌ๊ธฐ
    • N==1 or M==1์ด๋ฉด ๊ทธ๋ƒฅ 1. ๋.
    • arr[i][j]๊ฐ€ ‘์ •์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ์œ„ ๊ผญ์ง“์ ’์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ํƒ์ƒ‰ ์‹œ์ž‘
    • ๊ฐ€์žฅ ํฐ ๊ฑธ ๊ตฌํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ 1๋ถ€ํ„ฐ ๋Œ์ง€๋ง๊ณ  ํฐ ๊ฒƒ๋ถ€ํ„ฐ ใ…‡ใ…‡. for (int k = min(N-i-1, M-j-1); k>0; k--)
    • if (k < l) break; : ์˜ˆ๋ฅผ ๋“ค์–ด l=3์ธ๋ฐ ํƒ์ƒ‰ ๋‚จ์€ ์ค„์ด 2์ค„ ๋ฐ–์— ์—†๋‹ค๋ฉด ํ•  ํ•„์š” ์—†์Œ.

 

‘๋ฌธ์ž์—ด ์ž…๋ ฅ๋ฐ›๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ด์ •๋ฆฌ’๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค. (์–ธ์  ๊ฐ€)
์ž…๋ ฅ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งค๋ฒˆ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์œผ๋‹ˆ ๊ทธ๋•Œ๊ทธ๋•Œ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋‹ค.

 

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ์ฝ”๋“œ

C++

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cmath>
using namespace std;

int main() {
	//freopen("input.txt", "rt", stdin);
	int N, M;
	cin >> N >> M;
	int** arr = new int* [N];
	for (int i = 0; i < N; i++) {
		arr[i] = new int[M];
	}
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			scanf("%1d", &arr[i][j]);
		}
	}

	// arr[i][j]๊ฐ€ ์ •์‚ฌ๊ฐํ˜• ์™ผ์ชฝ ์œ„ ๊ผญ์ง“์ ์ด๋ผ๊ณ  ์น˜๊ณ  ๋ธŒ๋ฃจํŠธํฌ์Šค
	int l = 1;
	if (N == 1 || M == 1) {
		cout << 1;
		return 0;
	}
	else {
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				for (int k = min(N - i - 1, M - j - 1); k > 0; k--) {
					if (k < l) break;
					if (arr[i][j] == arr[i][j + k]
						&& arr[i][j] == arr[i + k][j]
						&& arr[i][j] == arr[i + k][j + k]) {
						l = max(k + 1, l);
						break;
					}
				}
			}
		}
	}
	cout << l * l;

	return 0;
}