๋ฌธ์ ๋งํฌ ๐ https://programmers.co.kr/learn/courses/30/lessons/81302?language=swift
๋ฌธ์ ์ดํด
๋ฉด์ ์ ์จ ์ฌ๋๋ค์ด ๊ฑฐ๋ฆฌ๋ฅผ ๋๊ณ ์์๋ ์ง ์ ๋ฌด๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ ๋๋ค. ๊ฑฐ๋ฆฌ๋ฅผ ์ ๋์๋ ์ง ํ๋จํ๋ ๊ธฐ์ค์ ์๋์ ๊ฐ์ต๋๋ค.
- ์๋ฆฌ ์ฌ์ด์ ํํฐ์ ์ด ์กด์ฌํ๊ฑฐ๋ ์๋ฆฌ๊ฐ ๋๊ฐ์ ์ผ ๊ฒฝ์ฐ O
- ๊ฑฐ๋ฆฌ๊ฐ 2์ธ๋ฐ ์๋ฆฌ ์ฌ์ด์ ์ฑ ์์ด ๋์ฌ์ ธ ์๋ค๋ฉด X
๊ฑฐ๋ฆฌ๋๊ธฐ๊ฐ ์ ์ง์ผ์ง ๋ฉด์ ์ฅ์ 1๋ก, ์ง์ผ์ง์ง ์๋ค๋ฉด 0์ผ๋ก ๋ฐํํ๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ํ์ด
dfs ๊ทธ๋ํ ๋ฌธ์ ์ ๋๋ค.
์์์๊ฐ ์์์๋ ์๋ฆฌ P ์ผ๊ฒฝ์ฐ dfs๋ฅผ ๋๋ฉด์ ์์ ์นธ๋ง์ด๋ฉด ํจ์ฐ, ์ฑ ์์ด๋ฉด ํ๋ฒ ๋ dfs ๋์์ ์ฒดํฌํด์ฃผ๋ฉด ๋ฉ๋๋ค. ํ ๋ฒ ๋ ๋ ๊ฒฝ์ฐ, ์ด์ ์ ํ์ธํ๋ ์๋ฆฌ๋ ํ์ธํ๋ฉด ์๋๋ฏ๋ก ํ์์๋ visited ๋ฐฐ์ด์ ๋์์ง๋ง, ์ด ๋ฌธ์ ์์๋ ์ต๋ 2๋ฒ๋ง dfsํ์์ ํ๋ฏ๋ก ํจ์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ์์ต๋๋ค.
์ ์ฉํ ์ ๋ณด -> String์ Array๋ก ๋ฐ๊พธ๊ธฐ
- solutionํจ์์ ํ๋ผ๋ฏธํฐ places๋ "POOXP" ํํ๋ก ์ค๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ["P","O","O","X","P"] ๋ก ๋ฐ๊ฟ์ฃผ์ด์ผํฉ๋๋ค.
- ๋ฐฉ๋ฒ 1. Array(string)
- ๋ฐฉ๋ฒ 2. let array = string.map { String($0) }
๋ฐฉ๋ฒ 2๋ก ํ์์ต๋๋ค.
์ฝ๋
import Foundation
var direction: [(Int,Int)] = [(-1,0),(0,1),(1,0),(0,-1)] // ์, ์ค๋ฅธ์ชฝ, ์๋, ์ผ์ชฝ
func dfs(_ places: [[String]], _ xy: (Int,Int), _ count: Int, _ from: (Int, Int)) -> Bool {
if count == 2 {
if places[xy.0][xy.1] == "P" {
return false
} else {
return true
}
}
for dir in direction {
let nextDirection: (Int,Int) = (xy.0 + dir.0, xy.1 + dir.1)
if nextDirection.0 == from.0 && nextDirection.1 == from.1 { continue } // ์ด์ ์ ์ฐพ์ ๊ณณ
if nextDirection.0 < 0 || nextDirection.0 >= 5 { continue } // ๋ฒ์ ๋ฐ
if nextDirection.1 < 0 || nextDirection.1 >= 5 { continue } // ๋ฒ์ ๋ฐ
if places[nextDirection.0][nextDirection.1] == "X" { continue } // ๊ฐ๋ฆผ๋ง
if places[nextDirection.0][nextDirection.1] == "P" { return false }
if places[nextDirection.0][nextDirection.1] == "O" {
if dfs(places, nextDirection, count+1, (xy.0, xy.1)) == false {
return false
} else {
continue
}
}
}
return true
}
func solution(_ places:[[String]]) -> [Int] {
var result = [Int]()
places.forEach {
var places: [[String]] = []
for oneLine in $0 {
let arr = oneLine.map { String($0) }
places.append(arr)
}
print(places)
var flag = 0
for (xIndex, x) in places.enumerated() {
for (yIndex, y) in x.enumerated() {
if y == "P" {
print(xIndex,yIndex)
if dfs(places, (xIndex,yIndex), 0, (0,0)) == false {
flag = 1
break
}
}
}
if flag == 1 {
break
}
}
if flag == 0 {
result.append(1)
} else {
result.append(0)
}
}
return result
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] ์์ฅ (0) | 2022.03.30 |
---|---|
[Programmers] n์ง์ ๊ฒ์ (0) | 2022.02.06 |
[Programmers] 1์ฐจ ์ถ์ ํธ๋ํฝ (0) | 2022.02.03 |
[Programmers] ๋ฌธ์์ด ์์ถ (0) | 2022.02.01 |
[Baekjoon] 1021 ํ์ ํ๋ ํ (0) | 2022.01.12 |