티스토리 뷰

Coding

배열에서 가장 큰 정사각형 찾기

out of coding 2019. 12. 2. 17:14

프로그래머스에서 제공하는 문제 중에 하나라고 합니다.

 

배열 내부를 탐색하여 가장 큰 정사각형을 찾는 알고리즘입니다.

 

1로 만들수 있는 가장 큰 정사각형을 만들면 됩니다.

 

성능상의 문제가 있기 때문에 성능을 고려하여 DP(Dynamic Programming)를 사용하여 구현할 수 있습니다.

저는 swift 쟁이라서 이걸로 짰습니다.

func solution(_ board:[[Int]]) -> Int {
    var copy = board
    
    var answer = 0
    let yCount = copy.count
    let xCount = copy[0].count
    var max = 0

    if yCount < 2 || xCount < 2 {
        for y in 0..<yCount {
            for x in 0..<xCount where copy[y][x] == 1 {
                max = 1
                break
            }
        }
    } else {
        for y in 1..<yCount {
            for x in 1..<xCount where copy[y][x] == 1 {
                copy[y][x] = min(copy[y - 1][x], copy[y][x - 1], copy[y - 1][x - 1]) + 1
                if copy[y][x] > max {
                    max = copy[y][x]
                }
            }
        }
    }
    
    answer = Int(pow(CGFloat(max), 2))

    return answer
}

자신의 왼쪽, 자신의 위쪽, 자신의 대각선 위쪽 숫자들중에 가장 작은 수에서 +1을 한 값을 자신의 값에 저장하는 방법으로 값을 구할수 있습니다.

 

이렇게 하면 자신 자체가 정사각형이 되면서 앞에 두개의 공간의 값을 가져와서 더해주면 됩니다.

'Coding' 카테고리의 다른 글

Go. Int64를 벗어나는 스트링 숫자 더하기  (0) 2020.07.04
이진트리의 순회.  (0) 2020.07.01
fibonacci. index에 해당하는 값은?  (0) 2019.11.27
c0dility. 1. BinaryGap  (0) 2019.11.23
Stack을 이용하여 Queue 만들기  (0) 2019.11.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함