728x90
๋ฐ์ํ
Problem
Solution
1. ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ์ ํฉํ์ง ํ์ธํ๋ค.
๋ฐ๋ฅ,๊ธฐ๋ฅ ์,๋ณด์ ์์ผ ๊ฒฝ์ฐ ์ค์นํ ์ ์์ต๋๋ค.
func checkRightPillars(x:Int,y:Int) -> Bool {
//๋ฐ๋ฅ,๊ธฐ๋ฅ ์,๋ณด์ ์ผ์ชฝ ์์ผ ๊ฒฝ์ฐ
if y == 0 || pillars[x][y-1] || papers[x][y]{
return true
}
//๋ณด์ ์ค๋ฅธ์ชฝ ์์ผ ๊ฒฝ์ฐ
if x > 0 {
if papers[x-1][y] {
return true
}
}
return false
}
2. ๋ณด๋ฅผ ์ถ๊ฐํ ๋ ์ ํฉํ์ง ํ์ธํ๋ค.
๋ณด์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ด ๊ธฐ๋ฅ ์์ผ ๊ฒฝ์ฐ๋ ์์ชฝ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ ์ค์นํ ์ ์์ต๋๋ค.
func checkRightPapers(x:Int,y:Int,n:Int) -> Bool {
//๋ณด์ ์ผ์ชฝ์ด ๊ธฐ๋ฅ ์์ผ ๊ฒฝ์ฐ
if pillars[x][y-1] {
return true
}
if x < n {
//๋ณด์ ์ค๋ฅธ์ชฝ์ด ๊ธฐ๋ฅ ์์ผ ๊ฒฝ์ฐ
if pillars[x+1][y-1]{
return true
}
}
if x > 0 && x < n {
//์์ชฝ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ
if papers[x-1][y] && papers[x+1][y]{
return true
}
}
return false
}
3. ๊ธฐ๋ฅ์ด๋ ๋ณด๋ฅผ ์ญ์ ํ ํ ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ๋ณด๊ฐ ์ ํฉํ์ง ํ์ธํ๋ค.
๊ธฐ๋ฅ์ด๋ ๋ณด๋ฅผ ์ญ์ ํ ํ ๋ชจ๋ ๊ธฐ๋ฅ๊ณผ ๋ณด๊ฐ ์ ํฉํ์ง ํ์ธํ๊ณ ๋ง์ฝ ํ๋๋ผ๋ ์ ํฉํ์ง ์๋ค๋ฉด ๋ค์ ์ถ๊ฐํด์ค ๋ฌดํจ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.
func checkRightStructure(n:Int) -> Bool {
for paper in paperLocation {
if !checkRightPapers(x: paper.0, y: paper.1,n: n){
return false
}
}
for pillar in pillarLocation {
if !checkRightPillars(x: pillar.0, y: pillar.1) {
return false
}
}
return true
}
4. ๊ธฐ๋ฅ๊ณผ ๋ณด์ ์์น๋ฅผ ์กฐ๊ฑด์ ๋ง๊ฒ ์ ๋ ฌ ํ ๋ฐํํ๋ค.
let result = pillarLocation.map{[$0.0,$0.1,0]} + paperLocation.map{[$0.0,$0.1,1]}
return result.sorted { $0[0] == $1[0] ? $0[1] == $1[1] ? $0[2] < $1[2] : $0[1] < $1[1] : $0[0] < $1[0]
}
Source Code
728x90
๋ฐ์ํ
๋๊ธ