ABOUT ME

woongS, iOS, succesS 삼쓰의 개발 블로그

Today
Yesterday
Total
  • 백준 2210 숫자판 점프
    Algorithm/BOJ 2021. 3. 29. 14:34
    728x90

    출처: 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

    댓글

Designed by Tistory.