본문 바로가기

알고리즘

[배열] QueensThatCanAttackTheKing - LeetCode Swift

문제 : https://leetcode.com/problems/queens-that-can-attack-the-king/submissions/

 

Queens That Can Attack the King - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

풀이방법 :

  1. 1상하좌우 king으로부터 가까운순으로 돈다.
  2. 대각선 상하좌우 king으로부터 가까운순으로 돈다.
  3. Queen(1)을 찾게 되면 그 라인은 더이상 안돈다.

음.. 공통된 코드가 많이 보여서 좀 아쉬운 코드다. 

다만 속도랑 메모리면에서는 100퍼가 뜨긴 했지만 코드 수를 줄이고 싶다.!!

굳이 따지자면 DFS를 한 것 같다.

 

코드

class Solution {
    func queensAttacktheKing(_ queens: [[Int]], _ king: [Int]) -> [[Int]] {
        //2차원 배열 초기화
        var matrix = Array(repeating: Array(repeating: 0, count: 8), count: 8)
        var row = king[0]
        var column = king[1]
        var result = [[Int]]()
        for queen in queens {
            matrix[queen[0]][queen[1]] = 1
        }
        matrix[king[0]][king[1]] = 2
        
        //위쪽에 1 있는 지 검사
        while row >= 0 {
            if matrix[row][column] == 1 {
                result.append([row, column])
                break
            }
            row -= 1
        }
        
        row = king[0]
        
        //아래쪽에 1 있는 지 검사
        while row <= 7  {
            if matrix[row][column] == 1 {
                result.append([row, column])
                break
            }
            row += 1
        }
        
        row = king[0]
        
        //왼쪽에 1 있는 지 검사
        while column >= 0 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            column -= 1
        }
        
        column = king[1]
        //오른쪽에 1 있는 지 검사
        while column <= 7 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            column += 1
        }
        
        column = king[1]
        
        //왼쪽대각선 위에 1 있는 지 검사
        while row >= 0 && column >= 0 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            row -= 1
            column -= 1
        }
        
        row = king[0]
        column = king[1]
        
        //왼쪽대각선 아래에 1 있는 지 검사
        while row <= 7 && column >= 0 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            row += 1
            column -= 1
        }
        
        row = king[0]
        column = king[1]
        
        //오른쪽대각선 아래에 1 있는 지 검사
        while row <= 7 && column <= 7 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            row += 1
            column += 1
        }
        
        row = king[0]
        column = king[1]
        
        //오른대각선 위에 1 있는 지 검사
        while row >= 0 && column <= 7 {
            if matrix[row][column] == 1 {
                result.append([row,column])
                break
            }
            row -= 1
            column += 1
        }
        
        return result
    }
}
반응형