-
백준 2210 숫자판 점프Algorithm/BOJ 2021. 3. 29. 14:34728x90
출처: www.acmicpc.net/problem/2210
분류: dfs, 완전탐색
접근방식
왔던 칸을 다시 가도 되므로 그냥 보드의 범위를 넘지 않는지만 체크하면서
6자리까지 dfs 로 계속 숫자를 더해주고 set에 담아서 개수를 출력하면 되는 문제였습니다.
저는 다음 칸을 만들고 filter로 범위를 걸러주는 식으로 풀어서 먼저 범위를 체크하고 만드는 것보다 시간이 좀 더 걸린 것 같네요!
해결방법
typealias Point = (r: Int, c: Int) var board = [[String]]() var digitSet = Set<String>() for _ in 0..<5 { board.append(readLine()!.split(separator: " ").map { String($0) }) } func nexts(_ p: Point) -> [Point] { return [ (p.r+1, p.c), (p.r-1, p.c), (p.r, p.c+1), (p.r, p.c-1) ].filter { 0..<5 ~= $0.r && 0..<5 ~= $0.c } } func jump(_ p: Point, _ digit: String) { guard digit.count < 6 else { digitSet.insert(digit) return } for next in nexts(p) { jump(next, digit + board[p.r][p.c]) } } for r in 0..<5 { for c in 0..<5 { jump((r, c), "") } } print(digitSet.count)
'Algorithm > BOJ' 카테고리의 다른 글
백준 1520 내리막 길 (0) 2021.03.30 백준 12865 평범한 배낭 (0) 2021.03.30 백준 17406 배열 돌리기4 (0) 2021.03.29 백준 16637 괄호 추가하기 (0) 2021.03.29 백준 17471 게리맨더링 (0) 2021.03.28