코딩테스트

[코딩테스트] - 격자판 회문수(Swift)

clamp 2023. 6. 6. 11:55

격자판 회문수

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)