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
반응형
'📖 Problem Solution > Programmers' 카테고리의 다른 글
[Swift] 프로그래머스 N-Queen (0) | 2021.08.28 |
---|---|
[Swift] 프로그래머스 위클리 챌린지 3주차 퍼즐 조각 채우기 (0) | 2021.08.20 |
[Swift] 프로그래머스 위클리 챌린지 2주차 상호 평가 (0) | 2021.08.10 |
[Swift] 2021 KAKAO INTERNSHIP 거리두기 확인하기 (0) | 2021.08.07 |
[Swift] 프로그래머스 위클리 챌린지 1주차 부족한 금액 계산하기 (0) | 2021.08.07 |
댓글