알고리즘
[배열] QueensThatCanAttackTheKing - LeetCode Swift
🐶 Hong
2021. 7. 28. 17:05
문제 : 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상하좌우 king으로부터 가까운순으로 돈다.
- 대각선 상하좌우 king으로부터 가까운순으로 돈다.
- 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
}
}
반응형