문제 : 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
}
}
반응형
'알고리즘' 카테고리의 다른 글
[Queue] Reveal Cards in Increasing Order - LeetCode Swift (0) | 2021.07.29 |
---|---|
[투포인터] 빗물 - backjoon Swift (0) | 2021.07.29 |
[해쉬] Group -anagrams - LeetCode Swift (0) | 2021.07.28 |
[LinkedList] remove-nth-node-from-end-of-list - LeetCode Swift (0) | 2021.07.23 |
[완전탐색] 카펫 - 프로그래머스 Swift (0) | 2021.07.22 |