728x90
배열을 사용해서 푸는 문제인데 2차원 배열을 1차원 배열로 사용해야 돼서 아래처럼 불편한 접근법 밖에 생각이 안 났어요.
print(park[0][park[0].index(park[0].startIndex, offsetBy: 1)])
그래서 시작 포인트 찾으면서 2차원 배열 새로 만들었고, 입력이 적어서 시간 초과는 안 뜰 것 같아 적당히 조건문만 작성해서 통과했습니다.
그런데 다른 분들 코드 보니까 enum case, 상하좌우 [0, 1], [1, 0], [0, -1], [-1, 0]처럼 좀 더 깔끔하게 코드 짤 수 있는 방법을 알아서 다음에 배열 문제 다시 풀 때는 적용해서 풀어보려고요.
답
func solution(_ park:[String], _ routes:[String]) -> [Int] {
let H = park.count - 1
let W = park[0].count - 1
var currentW = -1
var currentH = -1
var parkArray: [[String.Element]] = Array(repeating: Array(repeating: "O", count: W + 1), count: H + 1)
park.enumerated().map { i, iStr in
iStr.enumerated().map { j, jStr in
parkArray[i][j] = jStr
if jStr == "S" {
currentH = i
currentW = j
}
}
}
for route in routes {
let point = route.first!
let count = route.last!.wholeNumberValue!
var isPass = true
switch point {
case "N":
if (currentH - count) >= 0 {
for tempH in 1..<count+1 {
if parkArray[currentH - tempH][currentW] == "X" {
isPass = false
break
}
}
if isPass {
currentH -= count
}
}
case "S":
if (currentH + count) <= H {
for tempH in 1..<count+1 {
if parkArray[currentH + tempH][currentW] == "X" {
isPass = false
break
}
}
if isPass {
currentH += count
}
}
case "W":
if (currentW - count) >= 0 {
for tempW in 1..<count+1 {
if parkArray[currentH][currentW - tempW] == "X" {
isPass = false
break
}
}
if isPass {
currentW -= count
}
}
case "E":
if (currentW + count) <= W {
for tempW in 1..<count+1 {
if parkArray[currentH][currentW + tempW] == "X" {
isPass = false
break
}
}
if isPass {
currentW += count
}
}
default: break
}
}
return [currentH, currentW]
}
728x90
'Algorithm' 카테고리의 다른 글
SwiftUI: 덧칠하기 (1) | 2023.12.17 |
---|---|
SwiftUI: 추억 점수 (0) | 2023.12.17 |
SwiftUI: 성격 유형 검사하기 (1) | 2023.12.17 |
SwiftUI: 개인정보 수집 유효기간 (0) | 2023.08.30 |
SwiftUI: 달리기 경주 (0) | 2023.08.12 |