격자판 회문수
1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다.
빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다.
▣ 입력설명
1부터 9까지의 자연수로 채워진 7*7격자판이 주어집니다.
▣ 출력설명
5자리 회문수의 개수를 출력합니다.
▣ 입력예제 1
2 4 1 5 3 2 6
3 5 1 8 7 1 7
8 3 2 7 1 3 8
6 1 2 3 2 1 1
1 3 1 3 5 3 2
1 1 2 5 6 5 2
1 2 2 2 2 1 5
▣ 출력예제 1
3
풀이 및 소스코드
var grid = [[Int]]()
var count = 0
for _ in 0..<7 {
let temp = readLine()!.split(separator: " ").map{ Int($0)! }
grid.append(temp)
}
// 가로방향 확인
// 가로는 7개가 존재하는데, 5개를 확인하기 때문에 0, 1, 2 를 확인하면 된다.
for row in 0..<7 {
for col in 0..<3 {
let subGrid = Array(grid[row][col..<(col + 5)])
if isPalindrome(array: subGrid){
count += 1
}
}
}
// 세로방향 확인
for row in 0..<3{
for col in 0..<7{
var subGrid = [Int]()
for i in row..<(row + 5){
subGrid.append(grid[i][col])
}
if isPalindrome(array: subGrid){
count += 1
}
}
}
func isPalindrome(array: [Int]) -> Bool {
for i in 0..<(array.count / 2){
if array[i] != array[array.count - 1 - i]{
return false
}
}
return true
}
print(count)