[BOJ] 3109. ๋นต์ง‘ (๐Ÿฅ‡, ๊ทธ๋ฆฌ๋””/DFS)

lemythe423ยท2023๋…„ 12์›” 1์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
77/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

๐Ÿ’ก ์•„์ด๋””์–ด

1์—ด์—์„œ C์—ด๊นŒ์ง€ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ€์žฅ ์ด์ƒ์ ์ด๋ฉด์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ™์€ ํ–‰์— ์œ„์น˜ํ•œ C์—ด๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ผ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ค‘๊ฐ„์— ๊ฑด๋ฌผ๋“ค์ด ์œ„์น˜ํ•ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ด์ƒ์ ์œผ๋กœ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋˜๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค.

๋Œ€์‹  ์ตœ์ ์˜ ํ˜•ํƒœ๋ฅผ ํ–ฅํ•ด ๊ฐˆ ์ˆ˜๋Š” ์žˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ถœ๋ฐœํ•˜๋Š” ์œ„์น˜์˜ ํ–‰๊ณผ ๊ฐ™์€ ํ–‰์— ์žˆ๋Š” ์—ด๋กœ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐฉํ–ฅ์€ ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ์œ„, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ์•„๋ž˜๋ผ๊ณ  ํ–ˆ๋‹ค. ์ด๋•Œ ๊ฑด๋ฌผ์— ์˜ํ•ด ๊ธธ์ด ๋น„๊ปด๊ฐ€์•ผํ•ด์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋”๋ผ๋„ ์ตœ๋Œ€ํ•œ ๋‹ค์‹œ ์œ„์ชฝ์œผ๋กœ ์˜ฌ๋ผ์˜ค๋ ค๊ณ  ํ•ด์„œ ์ถœ๋ฐœํ•œ ์ง€์ ์˜ ํ–‰๊ณผ ๊ฐ™์€ ํ–‰์˜ ์—ด๋กœ ์ด๋™ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ด์ƒ์ ์ธ ํ˜•ํƒœ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ์œ„, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋Œ€๊ฐ์„  ์•„๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ์ด๋™ํ•  ๊ฒƒ

์œ„์˜ ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉฐ ์˜ˆ์ œ2 ๋ฒˆ์˜ ์ด๋™ ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆฌ๋ฉด ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค. 1ํ–‰์—์„œ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ 3์—ด์—์„œ ๊ฑด๋ฌผ ๋•Œ๋ฌธ์— ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋˜์ง€๋ฉด 4์—ด์—์„œ ๋Œ€๊ฐ์„  ์œ„๋กœ ๋จผ์ € ์ด๋™ํ•˜์˜€๊ณ  ๊ฒฐ๊ตญ ์ตœ์ข…์ ์œผ๋กœ 1ํ–‰ C์—ด์— ๋„๋‹ฌํ•˜๋ฉด์„œ ์ข…๋ฃŒ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์œ„์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ฐœ ์ง€์ ์˜ ํ–‰์— ์žˆ๋Š” C์—ด์— ๋„๋‹ฌํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ฆผ์˜ ์ด์ƒ์  ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ , ์•„๋ž˜์˜ ํ–‰๋“ค๋„ ์ตœ๋Œ€ํ•œ ์ถœ๋ฐœ ์ง€์ ์˜ ํ–‰์— ์œ„์น˜ํ•œ C์—ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™•๋ฅ ์ด ๋†’์•„์ง„๋‹ค.

โฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ

๊ทผ๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค.

๊ธฐ์กด ํ’€์ด์—์„œ๋Š” ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ DFS๋กœ ๊ตฌํ–ˆ๋Š”๋ฐ, ๊ฒฝ๋กœ๋ฅผ ์ด๋™ํ•˜๋ฉด์„œ ๊ณ„์†ํ•ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ C์—ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ๋กœ๋“ค์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ False ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์•„๋ž˜์— ์žˆ๋Š” ํ–‰๋“ค ์—ญ์‹œ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ํ•œ ๋ฒˆ ๋” ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ค˜์„œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์–ด์ฐจํ”ผ ํ•œ ๋ฒˆ C์—ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋œ ์œ„์น˜๋Š” ๋‹ค๋ฅธ ์–ด๋–ค ์œ„์น˜์—์„œ ์ถœ๋ฐœํ•ด์„œ ๊ทธ ์œ„์น˜์— ๋„๋‹ฌํ•˜๋”๋ผ๋„ ๋˜‘๊ฐ™์ด C์—ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค.

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋นจ๊ฐ„ ์ ์€ ๊ฒฐ๊ตญ ์ตœ์ข…์ ์œผ๋กœ C์—ด์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฏธ 2๋ฒˆ์งธ ํ–‰์—์„œ ํŒ๋‹จ๋˜์—ˆ์ง€๋งŒ, C์—ด์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ False ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์žˆ๊ณ  ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— 3๋ฒˆ์งธ ํ–‰์—์„œ ๋‹ค์‹œ ํ•ด๋‹น ์œ„์น˜๋ฅผ ํ†ตํ•ด 2๋ฒˆ์งธ ํ–‰์—์„œ ์ง€๋‚˜์ณค๋˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ง€๋‚˜์น˜๊ฒŒ ๋œ๋‹ค.

๊ฒฐ๊ตญ ์ด๋ฏธ ์•ˆ ๋œ๋‹ค๊ณ  ํŒ๋ช…๋œ ์œ„์น˜๋ฅผ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต๊ณผ์ •์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ ๊ฒƒ์ด๋‹ค.

# ๋นต์ง‘

import sys
input = sys.stdin.readline

def dfs(x, y):
    global way
    visited[x][y] = True
    if y == C - 1:
        way += 1
        return True
    
    for k in range(3):
        nx, ny = x + DIR[k][0], y + DIR[k][1]
        if (nx < 0 or nx >= R or MAP[nx][ny] == 'x' or visited[nx][ny]): continue
        if dfs(nx, ny):
            return True
    # visited[x][y] = False
    return False

R, C = map(int, input().split())
MAP = [list(input()) for _ in range(R)]
visited = [[False] * C for _ in range(R)]
DIR = [(-1, 1), (0, 1), (1, 1)]
way = 0

for i in range(R):
    visited[i][0] = True
    dfs(i, 0)

print(way)
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€