[BOJ][๐ŸŸก5][๋ฐฑ์ค€#18405] ๊ฒฝ์Ÿ์  ์ „์—ผ

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #18405


๋ฌธ์ œ

NxN ํฌ๊ธฐ์˜ ์‹œํ—˜๊ด€์ด ์žˆ๋‹ค. ์‹œํ—˜๊ด€์€ 1x1 ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๋ฉฐ, ํŠน์ •ํ•œ ์œ„์น˜์—๋Š” ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ๋ฐ”์ด๋Ÿฌ์Šค๋Š” 1๋ฒˆ๋ถ€ํ„ฐ K๋ฒˆ๊นŒ์ง€์˜ ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜์— ์†ํ•œ๋‹ค. ์‹œํ—˜๊ด€์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฐ”์ด๋Ÿฌ์Šค๋Š” 1์ดˆ๋งˆ๋‹ค ์ƒ, ํ•˜, ์ขŒ, ์šฐ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ฆ์‹ํ•ด ๋‚˜๊ฐ„๋‹ค. ๋‹จ, ๋งค ์ดˆ๋งˆ๋‹ค ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ข…๋ฅ˜์˜ ๋ฐ”์ด๋Ÿฌ์Šค๋ถ€ํ„ฐ ๋จผ์ € ์ฆ์‹ํ•œ๋‹ค. ๋˜ํ•œ ์ฆ์‹ ๊ณผ์ •์—์„œ ํŠน์ •ํ•œ ์นธ์— ์ด๋ฏธ ์–ด๋– ํ•œ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ๊ทธ ๊ณณ์—๋Š” ๋‹ค๋ฅธ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค. ์‹œํ—˜๊ด€์˜ ํฌ๊ธฐ์™€ ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, S์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— (X,Y)์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ข…๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋งŒ์•ฝ S์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, 0์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ด ๋•Œ X์™€ Y๋Š” ๊ฐ๊ฐ ํ–‰๊ณผ ์—ด์˜ ์œ„์น˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์‹œํ—˜๊ด€์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ„์— ํ•ด๋‹นํ•˜๋Š” ๊ณณ์€ (1,1)์— ํ•ด๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3x3 ํฌ๊ธฐ์˜ ์‹œํ—˜๊ด€์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์„œ๋กœ ๋‹ค๋ฅธ 1๋ฒˆ, 2๋ฒˆ, 3๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๊ฐ๊ฐ (1,1), (1,3), (3,1)์— ์œ„์น˜ํ•ด ์žˆ๋‹ค. ์ด ๋•Œ 2์ดˆ๊ฐ€ ์ง€๋‚œ ๋’ค์— (3,2)์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ข…๋ฅ˜๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด์ž.

1์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— ์‹œํ—˜๊ด€์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

2์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„์— ์‹œํ—˜๊ด€์˜ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ 2์ดˆ๊ฐ€ ์ง€๋‚œ ๋’ค์— (3,2)์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ข…๋ฅ˜๋Š” 3๋ฒˆ ๋ฐ”์ด๋Ÿฌ์Šค๋‹ค. ๋”ฐ๋ผ์„œ 3์„ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต์ด๋‹ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N, K๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 200, 1 โ‰ค K โ‰ค 1,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ์„œ ์‹œํ—˜๊ด€์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ–‰์€ N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•ด๋‹น ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ 0์ด ์ฃผ์–ด์ง„๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๋ฐ”์ด๋Ÿฌ์Šค์˜ ๋ฒˆํ˜ธ๋Š” K์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๋กœ๋งŒ ์ฃผ์–ด์ง„๋‹ค. N+2๋ฒˆ์งธ ์ค„์—๋Š” S, X, Y๊ฐ€ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค S โ‰ค 10,000, 1 โ‰ค X, Y โ‰ค N)


์ถœ๋ ฅ

S์ดˆ ๋’ค์— (X,Y)์— ์กด์žฌํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ข…๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ S์ดˆ ๋’ค์— ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, 0์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

3 3
1 0 2
0 0 0
3 0 0
2 3 2


์ถœ๋ ฅ

3


์˜ˆ์ œ 2

์ž…๋ ฅ

3 3
1 0 2
0 0 0
3 0 0
1 2 2


์ถœ๋ ฅ

0


My Sol

def main():
    def find_position():
        P = [set() for _ in range(K+1)]
        for i in range(N):
            for j in range(N):
                P[mat[i][j]].add((i, j))

        mn, mx = 1, K
        while not P[mn]: mn += 1
        while not P[mx]: mx -= 1
        return P, mn, mx


    def move():
        def move_one(i, j):
            v = mat[i][j]
            for di, dj in ((-1,0),(1,0),(0,-1),(0,1)):
                si, sj = i+di, j+dj
                if not (0<=si<N and 0<=sj<N): continue
                if mat[si][sj]: continue
                mat[si][sj] = v
                add_set.add((si, sj))

        for v in range(mn, mx+1):
            if not P[v]: continue
            add_set = set()
            for i, j in P[v]:
                move_one(i, j)
            P[v] = add_set

    N, K = map(int, input().split())
    mat = [list(map(int, input().split())) for _ in range(N)]
    S, X, Y = map(int, input().split())
    P, mn, mx = find_position()

    for _ in range(S):
        move()
        while not P[mn] and mn < mx: mn+=1
        while not P[mx] and mn < mx: mx-=1
    return mat[X-1][Y-1]

print(main())

์‚ฌ๋ฐฉ์„ ํ™•์ธํ•˜๋Š” ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ์˜€๋‹ค. ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  1. ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค.
  2. 1๋ถ€ํ„ฐ K๊นŒ์ง€์˜ ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ P ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ์— K+1๊ฐœ์˜ set์„ ์ฑ„์šด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ดˆ ์ž…๋ ฅ๋ฐ›์€ mat์˜ ๋ฐ”์ด๋Ÿฌ์Šค ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ์ขŒํ‘œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋˜ํ•œ ์กฐํšŒ์˜ ์‹œ์ž‘๊ณผ ๋์ด ๋  mn๊ณผ mx๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๋ฅผ ๋ถ„๋ฆฌํ•œ ํ•จ์ˆ˜๊ฐ€ find_position์ด๋‹ค.
  3. ๋ฐ”์ด๋Ÿฌ์Šค์˜ ์ด๋™์ด S๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ, for๋ฌธ์œผ๋กœ move ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ด๋™์— ๋”ฐ๋ผ ์กฐํšŒ์˜ ๋ฒ”์œ„๋ฅผ ๋งค๋ฒˆ ์žฌํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด mn๊ณผ mx์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ด ์กฐํšŒ ๋ฒ”์œ„๋ฅผ ์ขํ˜€์ค€๋‹ค.
  4. ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๋ฐ”์ด๋Ÿฌ์Šค๋ถ€ํ„ฐ ์˜์—ญ์„ ํ™•์žฅํ•ด๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— mn๋ถ€ํ„ฐ mx๊นŒ์ง€ P์˜ ๊ฐ set์„ ์ž‘์€ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์กฐํšŒํ•ด move_one ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” move ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.
  5. move_one ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ๋ฐ›์€ ์ขŒํ‘œ์˜ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํ™•์ธํ•˜์—ฌ N์˜ ๋ฒ”์œ„ ๋‚ด์ด๋ฉด์„œ ์ด๋ฏธ ์„ ์ ํ•œ ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ขŒํ‘œ์— ๋ฐ”์ด๋Ÿฌ์Šค์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  P์˜ ์ขŒํ‘œ๊ฐ’ set์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•œ add_set์— ํ™•์žฅ ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ํ•œ ๋ฒˆํ˜ธ์˜ ๋ฐ”์ด๋Ÿฌ์Šค์˜ ํ™•์žฅ์ด ๋๋‚˜๋ฉด ๊ธฐ์กด ์ขŒํ‘œ๋Š” ๋‹ค์‹œ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ add_set์„ P์˜ ํ•ด๋‹น ๋ฒˆํ˜ธ์˜ set์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.


๊ฒฐ๊ณผ

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

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