-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogrammers_12905.swift
More file actions
71 lines (67 loc) · 2.2 KB
/
programmers_12905.swift
File metadata and controls
71 lines (67 loc) · 2.2 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//
// programmers_12905.swift
// algo
//
// Created by 이재은 on 2021/09/02.
// Copyright © 2021 이재은. All rights reserved.
//
// programmers 12905 가장 큰 정사각형 찾기
//문제 설명
//1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
//
//예를 들어
//
//1 2 3 4
//0 1 1 1
//1 1 1 1
//1 1 1 1
//0 0 1 0
//가 있다면 가장 큰 정사각형은
//
//1 2 3 4
//0 1 1 1
//1 1 1 1
//1 1 1 1
//0 0 1 0
//가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.
//
//제한사항
//표(board)는 2차원 배열로 주어집니다.
//표(board)의 행(row)의 크기 : 1,000 이하의 자연수
//표(board)의 열(column)의 크기 : 1,000 이하의 자연수
//표(board)의 값은 1또는 0으로만 이루어져 있습니다.
//입출력 예
//board answer
//[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
//[[0,0,1,1],[1,1,1,1]] 4
//입출력 예 설명
//입출력 예 #1
//위의 예시와 같습니다.
//
//입출력 예 #2
//| 0 | 0 | 1 | 1 |
//| 1 | 1 | 1 | 1 |
//로 가장 큰 정사각형의 넓이는 4가 되므로 4를 return합니다.
func solution(_ board: [[Int]]) -> Int {
var board = board
var maxArea: Int = 0
for i in 0..<board.count {
for j in 0..<board[i].count {
if board[i][j] == 0 { continue }
if i == 0 || j == 0 {
if board[i][j] > maxArea {
maxArea = board[i][j]
}
continue
}
board[i][j] += min(board[i-1][j-1], board[i-1][j], board[i][j-1])
maxArea = max(maxArea, board[i][j])
}
}
return maxArea * maxArea
}
print(solution([[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]])) // 9
print(solution([[0,0,1,1],[1,1,1,1]])) // 4
print(solution([[0,0,0,0],[0,0,0,0]])) // 0
print(solution([[1,0,0,0],[0,0,0,0]])) // 1
print(solution([[1,1,1],[1,0,1],[1,1,1]])) // 1