λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/boj

BOJ 3109 - 빡집

by HandHand 2021. 3. 14.

문제

λ°±μ€€ 온라인 저지 - 3109번

풀이 κ³Όμ •

νŒŒμ΄ν”„λ₯Ό μ—°κ²°ν•  수 μžˆλŠ” μ„Έ 가지 방법을 μ΄μš©ν•΄μ„œ κ°€μž₯ λ§Žμ€ μ—°κ²° 방법을 μ°ΎλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
λ°±νŠΈλž˜ν‚Ή 을 μ΄μš©ν•΄μ„œ λͺ¨λ“  경우λ₯Ό 찾을 수 μžˆλŠ”λ° λ¬Έμ œλŠ” μ€‘λ³΅λœ 탐색이 많이 μ‘΄μž¬ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 얻을 수 μžˆλŠ” μ•„μ΄λ””μ–΄λŠ” λ°±νŠΈλž˜ν‚Ή 을 톡해 ν•œ μ§€μ μ—μ„œ λͺ©ν‘œ 지점에 λ„λ‹¬ν•˜λŠ” 방빕이 μžˆλŠ”μ§€ νŒλ‹¨ν•˜κ³  μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
λ”°λΌμ„œ ν˜„μž¬ μ§€μ μ—μ„œ λͺ©ν‘œ 지점에 방문이 κ°€λŠ₯ν•˜μ§€ μ•Šλ”λΌλ„
이 지점을 λ‹€μ‹œ λ―Έλ°©λ¬Έ μƒνƒœλ‘œ λ°”κΏ”μ£ΌλŠ” 것이 μ•„λ‹ˆλΌ κ·Έλƒ₯ λ°©λ¬Έ 처리둜 남겨놔도 λ©λ‹ˆλ‹€.
(λͺ©ν‘œ 지점에 도달 κ°€λŠ₯ν•œ κ²½μš°λŠ” 이 κ²½λ‘œμ— νŒŒμ΄ν”„λ₯Ό λ†”μ•Όν•˜κΈ° λ•Œλ¬Έμ— λ°©λ¬Έ 처리λ₯Ό ν•©λ‹ˆλ‹€.)
μ™œλƒν•˜λ©΄ 이후에 ν•΄λ‹Ή 지점에 λ‹€μ‹œ λ°©λ¬Έν•˜λ”λΌλ„ 또 λ‹€μ‹œ λͺ©ν‘œ 지점에 도달 λΆˆκ°€λŠ₯ν•œ 것은 자λͺ…ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
이λ₯Ό ν†΅ν•΄μ„œ μ€‘λ³΅λœ 탐색 횟수λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ²˜μŒμ—λŠ” 이 λ¬Έμ œκ°€ μ™œ 그리디 둜 λΆ„λ₯˜λ˜μ–΄ μžˆλŠ”μ§€ λͺ°λžλŠ”데 쀑볡 탐색을 μ€„μ΄λŠ” 아이디어 λ•Œλ¬Έμ— μ΄λ ‡κ²Œ λΆ„λ₯˜λœ 것 κ°™μŠ΅λ‹ˆλ‹€. πŸ˜„

μ½”λ“œ


import sys

sys.setrecursionlimit(10**6)

R, C = list(map(int, sys.stdin.readline().split()))
board = [list(sys.stdin.readline().strip()) for _ in range(R)]


def dfs(r, c):
    global board

    board[r][c] = 'x'

    if c == C - 1:
        return True

    is_reachable = False
    for nr, nc in [[r - 1, c + 1], [r, c + 1], [r + 1, c + 1]]:
        if nr < 0 or nr >= R or nc >= C:
            continue

        if board[nr][nc] == '.':
            is_reachable = is_reachable or dfs(nr, nc)

    return is_reachable


def solution():
    answer = 0

    for r in range(R):
        is_reachable = dfs(r, 0)
        if is_reachable:
            answer += 1

    return answer


print(solution())
λ°˜μ‘ν˜•

'πŸƒ algorithm > boj' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

BOJ 14925 - λͺ©μž₯ κ±΄μ„€ν•˜κΈ°  (0) 2021.03.14
BOJ 13164 - 행볡 μœ μΉ˜μ›  (0) 2021.03.14
BOJ 14620 - 꽃길  (0) 2021.03.14
BOJ 2688 - 쀄어듀지 μ•Šμ•„  (0) 2021.03.14
BOJ 16472 - κ³ λƒ₯이  (0) 2021.03.14

πŸ’¬ λŒ“κΈ€