[BOJ][๐ŸŸก3][๋ฐฑ์ค€#26009] ํ—˜๋‚œํ•œ ๋“ฑ๊ตฃ๊ธธ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #26009


๋ฌธ์ œ

ํ†ตํ•™๋Ÿฌ ์žฌํ—Œ์ด๋Š” 1๊ต์‹œ ์ˆ˜์—…์„ ๋“ฃ๊ธฐ ์œ„ํ•ด ์•„์นจ ์ผ์ฐ ํ•™๊ต์— ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์žฌํ—Œ์ด๊ฐ€ ์‚ฌ๋Š” ์ง€์—ญ์€ ํฌ๊ธฐ๊ฐ€ $N \times M$ ์ธ ๊ฒฉ์ž๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, $i$ํ–‰ $j$์—ด์— ํ•ด๋‹นํ•˜๋Š” ์นธ์„ $(i, j)$๋กœ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์žฌํ—Œ์ด๋Š” ํ˜„์žฌ $(1, 1)$์—, ํ•™๊ต๋Š” $(N, M)$์— ์œ„์น˜ํ•ด ์žˆ๋‹ค. ์žฌํ—Œ์ด๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ  ์ง€์—ญ ๋ฐ”๊นฅ์œผ๋กœ ๋‚˜๊ฐˆ ์ˆ˜๋Š” ์—†๋‹ค. ๋“ฑ๊ตฃ๊ธธ์€ ์ˆœํƒ„์น˜๋งŒ์€ ์•Š์€๋ฐ, ์ด ์ง€์—ญ์—๋Š” $K$๊ฐœ์˜ ์ •์ฒด ๊ตฌ์—ญ์ด ์žˆ๋‹ค. $i$๋ฒˆ์งธ ์ •์ฒด ๊ตฌ์—ญ์€ ์„ธ ์ •์ˆ˜ $R_i, C_i, D_i$๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์ด๋Š” $(R_i, C_i)$๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ๊ฐ€ $D_i$ ์ดํ•˜์ธ ์นธ๋“ค์—๋Š” ๊ทน์‹ฌํ•œ ๊ตํ†ต ์ •์ฒด๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‘ ์นธ $(R_1, C_1), (R_2, C_2)$ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” $|R_1 - R_2| + |C_1 - C_2|$์™€ ๊ฐ™๋‹ค. ์žฌํ—Œ์ด๋Š” ๊ตํ†ต ์ •์ฒด๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ์นธ์„ ๋ฐฉ๋ฌธํ•˜๋ฉด ์ˆ˜์—…์— ์ง€๊ฐํ•˜๊ฒŒ ๋˜๋ฉฐ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ง€๊ฐํ•˜์ง€ ์•Š๊ณ  ๋ฌด์‚ฌํžˆ ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋‹ค. $K$๊ฐœ์˜ ์ •์ฒด ๊ตฌ์—ญ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์žฌํ—Œ์ด๊ฐ€ ์ง€๊ฐํ•˜์ง€ ์•Š๊ณ  1๊ต์‹œ ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ์„์ง€ ์•Œ์•„๋ณด์ž. ๋˜ํ•œ ์žฌํ—Œ์ด๋Š” ์ตœ๋Œ€ํ•œ ์ผ์ฐ ํ•™๊ต์— ๋„์ฐฉํ•˜๋ ค ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŒ์•ฝ ์žฌํ—Œ์ด๊ฐ€ ์ง€๊ฐํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ตœ์†Œ ๋ช‡ ๋ฒˆ์˜ ์ด๋™์œผ๋กœ ์ˆ˜์—…์„ ๋“ค์œผ๋Ÿฌ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€๋„ ๊ตฌํ•ด๋ณด์ž.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒฉ์ž์˜ ํฌ๊ธฐ $N, M$์ด ์ฃผ์–ด์ง„๋‹ค. $(2 \le N, M \le 3\ 000)$ ๋‹ค์Œ ์ค„์— ์ •์ฒด ๊ตฌ์—ญ์˜ ์ˆ˜ $K$๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. $(1 \le K \le 3\ 000)$ ๋‹ค์Œ $K$๊ฐœ ์ค„์— ๊ฑธ์ณ ๊ฐ ์ •์ฒด ๊ตฌ์—ญ์˜ ์ •๋ณด $R_i, C_i, D_i$๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. $(1 \le R_i \le N, 1 \le C_i \le M, 0 \le D_i \le 3\ 000)$ $(1, 1)$ ๋˜๋Š” $(N, M)$์— ๊ตํ†ต ์ •์ฒด๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.


์ถœ๋ ฅ

์žฌํ—Œ์ด๊ฐ€ ์ง€๊ฐํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ์œผ๋ฉด YES๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋‹ค์Œ ์ค„์— ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์ง€๊ฐํ•˜์ง€ ์•Š๊ณ  ์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์—†๋‹ค๋ฉด NO๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

5 5
2
4 2 1
2 4 0


์ถœ๋ ฅ

YES
8


์˜ˆ์ œ 2

์ž…๋ ฅ

5 5
2
4 2 1
2 4 1


์ถœ๋ ฅ

NO


์˜ˆ์ œ 3

์ž…๋ ฅ

4 7
3
1 3 0
1 3 1
4 5 1


์ถœ๋ ฅ

YES
11


My Sol

import sys
input = sys.stdin.readline
from collections import deque

def main():
    global mat, I, J

    # N๋ฒˆ๋™์•ˆ ์ฐจ ํ™•์ธ
    for _ in range(N):
        if not check_main(): return False

    # BFS
    Q = deque([(0,0)])
    mat[0][0] = 1
    while Q:
        ni, nj = Q.popleft()
        for di, dj in ((1,0),(0,1),(-1,0),(0,-1)):
            si, sj = ni+di, nj+dj
            if not (0<=si<I and 0<=sj<J): continue
            if mat[si][sj]: continue

            mat[si][sj] = mat[ni][nj]+1
            if si==I-1 and sj==J-1: return True
            Q.append((si, sj))
    return False


def check_main():
    i, j, r = map(int, input().split())
    if i+j <= r: return False
    i, j = i-1, j-1
    check_diamond(i, j, r)
    return True

def check_diamond(ci, cj, cr):
    std_step = ((0,-1),(-1,0),(0,1),(1,0))
    std_didj = ((-1,1),(1,1),(1,-1),(-1,-1))
    for idx in range(4):
        k = 0
        si, sj = std_step[idx]
        i, j = ci+si*cr, cj+sj*cr
        di, dj = std_didj[idx]
        while k <= cr:
            check_diamond_unit(i, j)
            i, j, k = i+di, j+dj, k+1


def check_diamond_unit(i, j):
    global mat, I, J
    if not (0<=i<I and 0<=j<J): return
    mat[i][j] = '*'

# ์ž…๋ ฅ
I, J = map(int, input().split())
N = int(input())
mat = [[0] * J for _ in range(I)]
ret = main()
print('YES' if ret else 'NO')
if ret: print(mat[I-1][J-1]-1)

BFS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

  1. ๊ฐ€๋กœ ์„ธ๋กœ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , 2์ฐจ์› ๋ฐฐ์—ด mat์„ ๋งŒ๋“ ๋‹ค.
  2. mat์— ์ฐจ๊ฐ€ ๋ง‰ํžˆ๋Š” ๋ฒ”์œ„๋ฅผ ํ‘œ์‹œํ•˜๊ณ  BFS๋ฅผ ๋Œ๋ ค ์šฐ์ธก ํ•˜๋‹จ์˜ ์ขŒํ‘œ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.
  3. ํŠน์ • ์ฐจ์˜ ๋ฒ”์œ„ ๋‚ด์— (0,0) ์ขŒํ‘œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋™์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ NO๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๋ฒ”์œ„๋ฅผ ์ฒดํฌํ•œ๋‹ค.
  4. BFS์—์„œ๋Š” ๊ฐ€์žฅ์ž๋ฆฌ์— ์ฐจ์˜ ๋ฒ”์œ„๋ฅผ ํ‘œ์‹œํ•˜๊ฒŒ ๋œ๋‹ค. ๋‚ด๋ถ€๋Š” 3๋ฒˆ์˜ ๊ณผ์ •์„ ํ†ตํ•ด ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. ์ฐจ์˜ ์ค‘์•™ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฑฐ๋ฆฌ๋งŒํผ์˜ ๋‹ค์ด์•„๋ชฌ๋“œ ์˜์—ญ์„ ๋ชจ๋‘ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด (0,0) ์ขŒํ‘œ๋ถ€ํ„ฐ BFS๋ฅผ ์‹ค์‹œํ•œ๋‹ค.
  6. ์ตœํ•˜๋‹จ์— ๋„๋‹ฌํ•˜๊ฑฐ๋‚˜, ๋” ์กฐํšŒํ•  ์ขŒํ‘œ๊ฐ€ ์—†๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.
  7. ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋ชฉ์  ์ขŒํ‘œ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ