1. 날씨가 좋아서 산책하고 싶었는데 마침 공원산책 문제가 있길래 풀었당. 방구석 산책러~ 문제 난이도랑은 별개로 제목이나 문제 내용이 참신해서 재밌을때가 있다 근데 막상 풀면 열받음
운좋게도 어제 봤던 이중배열+enumerated 풀이가 떠올라서 적용해봤다!
도착지뿐만 아니라 도착지까지 가는길에 있는 장애물도 확인해야했다. for문을 쓸까 하다가 클로저에 좀 더 익숙해지고 싶어서 써봤다.
주로 contains는 배열이 어떤 요소나 배열을 포함하는지 확인할때 많이 썼는데 클로저를 매개변수로 받을 수 있다는 걸 알게됐다.
이때 클로저가 true를 반환하는 요소가 하나라도 있으면 true를, 아니면 false를 반환한다.
func solution(_ park:[String], _ routes:[String]) -> [Int] {
var (x, y) = (0, 0)
var blocked: [[Int]] = []
for (i, str) in park.enumerated() {
for (j, char) in str.enumerated() {
if char == "S" { (x, y) = (i, j) }
if char == "X" { blocked.append([i, j]) }
}
}
for route in routes {
let a = route.split(separator: " ")
let (direction, n) = (a[0], Int(a[1])!)
switch direction {
case "N":
if x - n < 0 || (1...n).contains(where: { i in
blocked.contains([x - i, y])
}) { break }
x -= n
case "S":
if x + n > park.count - 1 || (1...n).contains(where: { i in
blocked.contains([x + i, y])
}) { break }
x += n
case "E":
if y + n > park[0].count - 1 || (1...n).contains(where: { i in
blocked.contains([x, y + i])
}) { break }
y += n
case "W":
if y - n < 0 || (1...n).contains(where: { i in
blocked.contains([x, y - i])
}) { break }
y -= n
default:
break
}
}
return [x, y]
}
'TIL' 카테고리의 다른 글
[240401] Dictionary(grouping:by:)/if let과 guard let (0) | 2024.04.01 |
---|---|
[240331] % 사용 유의하기/swapAt (1) | 2024.03.31 |
[240329] index(_:offsetBy:)/contains()/isSubset(of:)/이중배열 enumerated() (0) | 2024.03.29 |
[240328] ArraySlice (0) | 2024.03.28 |
[240321] 시뮬레이터 화면 안뜸/동적, 정적타입 (0) | 2024.03.21 |