728x90
안녕하세요 코코종입니다
오늘은 컴~백~~~홈~~으로 찾아왔습니다. (서태지님 뭐 노래라는것만 알고 들어도 잘 모름^^ 저도 MZ세대임)
난이도가 쉬운편이었는데 실버1이네요? 정답률도 높구요! (개꿀문제라는 뜻)
import Foundation
// 1189 컴백홈 완탐 실1
// idea: k번만큼 이동했을 때 딱 집에 도착한 경우를 구한다.
let input = readLine()!.components(separatedBy: " ")
let R = Int(input[0])!
let C = Int(input[1])!
let K = Int(input[2])!
// [r-1][0] 에서 시작, [0][c-1] 까지 이동
var board: [[Int]] = []
for _ in 0..<R {
let arr = Array(readLine()!)
board.append( arr.map { c -> Int in
if c == "." { return 0 }
if c == "T" { return -1 }
else { return Int(String(c))! }
})
}
var answer = 0
func dfs(board: [[Int]], r: Int, c: Int, depth: Int) {
var board = board
let dr = [-1, 0, 1, 0]
let dc = [0, 1, 0, -1]
if board[r][c] == 0 {
board[r][c] = 1
}
if depth > K {
return
}
if depth == K, r == 0, c == C-1 {
answer += 1
} else {
for i in 0..<4 {
let rr = r + dr[i]
let cc = c + dc[i]
if rr >= 0, rr < R, cc >= 0, cc < C {
if board[rr][cc] == 0, board[r][c] > 0 { // 미방문시
board[rr][cc] = board[r][c] + 1
dfs(board: board, r: rr, c: cc, depth: depth + 1)
}
}
}
}
}
dfs(board: board, r: R-1, c: 0, depth: 1)
print(answer)
물론 또 틀렸습니다만..? 원래 이렇게 틀리면서 하는거 맞죠..?
저는 dfs로 가면서 해당 board의 숫자를 depth로 수정 하면서 파고들어갔는데요! 예제는 맞는데 계속 틀리다고 하지 뭡니까?
그리고 board를 [[Int]] 는 제가 depth를 board에 기입하려고 해서 한번 해봤는데.. 먼가 지저분해졌네요
틀린부분은 board[rr][cc]를 수정하고 다시 돌리지 않은 것이었어요... 탐색문제가 너무 오래방갑이라서 이런 실수를 하고 말았지 뭡니까 허허.. (이제 안틀리겠지..?)
//
// main.swift
// BackJoon
//
// Created by kokojong on 2023/04/12.
//
import Foundation
// 1189 컴백홈 완탐 실1
// idea: k번만큼 이동했을 때 딱 집에 도착한 경우를 구한다.
let input = readLine()!.components(separatedBy: " ")
let R = Int(input[0])!
let C = Int(input[1])!
let K = Int(input[2])!
// [r-1][0] 에서 시작, [0][c-1] 까지 이동
var board: [[Int]] = []
for _ in 0..<R {
let arr = Array(readLine()!)
board.append( arr.map { c -> Int in
if c == "." { return 0 }
if c == "T" { return -1 }
else { return Int(String(c))! }
})
}
var answer = 0
func dfs(board: [[Int]], r: Int, c: Int, depth: Int) {
var board = board
let dr = [-1, 0, 1, 0]
let dc = [0, 1, 0, -1]
if board[r][c] == 0 {
board[r][c] = 1
}
if depth > K {
return
}
if depth == K, r == 0, c == C-1 {
answer += 1
} else {
for i in 0..<4 {
let rr = r + dr[i]
let cc = c + dc[i]
if rr >= 0, rr < R, cc >= 0, cc < C {
if board[rr][cc] == 0, board[r][c] > 0 { // 미방문시
board[rr][cc] = board[r][c] + 1
dfs(board: board, r: rr, c: cc, depth: depth + 1)
board[rr][cc] = 0
}
}
}
}
}
dfs(board: board, r: R-1, c: 0, depth: 1)
print(answer)
간만에 탐색쪽을 풀려고 하니까 진짜 어질어질 하더라구요.. swift로 된 코드도 없고 해서 다른 언어로 된 내용을 보고 참고했답니다!
열어분들은 제가 swift로 풀어뒀으니까 참고하세요~ (진짜 스위프트 푸는사람 너무 없긴 한가봅니다 허허...)
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 12919 A와 B 2 (1) | 2023.04.17 |
---|---|
[Swift 알고리즘] 백준 1992 쿼드트리 (0) | 2023.04.16 |
[Swift 알고리즘] 백준 3085 사탕 게임 (0) | 2023.04.12 |
[Swift 알고리즘] 백준 21758 꿀 따기 (0) | 2023.04.07 |
[Swift 알고리즘] 백준 17615 볼 모으기 (0) | 2023.04.07 |