본문 바로가기

알고리즘/백준 문제풀이

백준 1051-숫자 정사각형(Kotlin)

728x90

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

문제 접근

문제 조건에 맞는 정사각형 중 크기가 최대인 정사각형의 크기를 구하는 문제

한 변의 최대길이에서 점점 내려가며 조건을 만족하면 최대값을 비교하는 식으로 구현

근데 풀기전에 다른사람 코드를 봐버림...

 

정답 코드

import java.util.*
import kotlin.math.max
import kotlin.math.min

//꼭짓점의 값이 모두 같은 가장 큰 크기의 정사각형 찾기
fun main(args: Array<String>): Unit = with(Scanner(System.`in`)) {
    val (n, m) = readLine()!!.split(" ").map { it.toInt() }
    val map = Array(n) { readLine()!!.toCharArray() }
    var max = 0

    for (i in 0 until n){
        for (j in 0 until m){
            //정사각형의 한 변의 최대길이
            val maxSize = min(m-j,n-i)

            for (k in maxSize downTo 1){
                if(map[i][j] == map[i+k-1][j+k-1] &&
                    map[i][j] == map[i][j+k-1]&&
                    map[i][j] == map[i+k-1][j]){
                    max = max(k*k, max)//조건을 만족하는 최대값
                }
            }


        }
    }
    print(max)
}

참고한 자료

https://youjourney.github.io/archivers/BOJ1051

 

[백준] 숫자 정사각형 (1051)(kotlin)

N*M크기의 직사각형이 있다.

youjourney.github.io

 

비고

문제풀이 전에 정답지가 있는지 확인하고 푸는데 있는지만 확인하고 보지말고 혼자 풀어야겠다...미리 보니까 정답 코드가 머리에서 안떠나..