[BOJ][๐ŸŸก4][๋ฐฑ์ค€#14499] ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14499


๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ Nร—M์ธ ์ง€๋„๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ง€๋„์˜ ์˜ค๋ฅธ์ชฝ์€ ๋™์ชฝ, ์œ„์ชฝ์€ ๋ถ์ชฝ์ด๋‹ค. ์ด ์ง€๋„์˜ ์œ„์— ์ฃผ์‚ฌ์œ„๊ฐ€ ํ•˜๋‚˜ ๋†“์—ฌ์ ธ ์žˆ์œผ๋ฉฐ, ์ฃผ์‚ฌ์œ„์˜ ์ „๊ฐœ๋„๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ง€๋„์˜ ์ขŒํ‘œ๋Š” (r, c)๋กœ ๋‚˜ํƒ€๋‚ด๋ฉฐ, r๋Š” ๋ถ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜, c๋Š” ์„œ์ชฝ์œผ๋กœ๋ถ€ํ„ฐ ๋–จ์–ด์ง„ ์นธ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.ย 

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


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ง€๋„์˜ ์„ธ๋กœ ํฌ๊ธฐ N, ๊ฐ€๋กœ ํฌ๊ธฐ M (1 โ‰ค N, M โ‰ค 20),ย ์ฃผ์‚ฌ์œ„๋ฅผ ๋†“์€ ๊ณณ์˜ ์ขŒํ‘œ x,ย y(0 โ‰ค x โ‰ค N-1, 0 โ‰ค y โ‰ค M-1), ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์˜ ๊ฐœ์ˆ˜ K (1 โ‰ค K โ‰ค 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ ๋ถ์ชฝ๋ถ€ํ„ฐ ๋‚จ์ชฝ์œผ๋กœ, ๊ฐ ์ค„์€ ์„œ์ชฝ๋ถ€ํ„ฐ ๋™์ชฝ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์‚ฌ์œ„๋ฅผ ๋†“์€ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋Š” ํ•ญ์ƒ 0์ด๋‹ค. ์ง€๋„์˜ ๊ฐ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋Š” 10 ๋ฏธ๋งŒ์˜ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค. ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” ์ด๋™ํ•˜๋Š” ๋ช…๋ น์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋™์ชฝ์€ 1, ์„œ์ชฝ์€ 2, ๋ถ์ชฝ์€ 3, ๋‚จ์ชฝ์€ 4๋กœ ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ฃผ์‚ฌ์œ„์˜ ์œ— ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.ย ๋งŒ์•ฝ ๋ฐ”๊นฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋ ค๊ณ  ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋ช…๋ น์„ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋ฉฐ, ์ถœ๋ ฅ๋„ ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

4 2 0 0 8
0 2
3 4
5 6
7 8
4 4 4 1 3 3 3 2


์ถœ๋ ฅ

0
0
3
0
0
8
6
3


์˜ˆ์ œ 2

์ž…๋ ฅ

3 3 1 1 9
1 2 3
4 0 5
6 7 8
1 3 2 2 4 4 1 1 3


์ถœ๋ ฅ

0
0
0
3
0
1
0
6
0


์˜ˆ์ œ 3

์ž…๋ ฅ

2 2 0 0 16
0 2
3 4
4 4 4 4 1 1 1 1 3 3 3 3 2 2 2 2


์ถœ๋ ฅ

0
0
0
0


์˜ˆ์ œ 4

์ž…๋ ฅ

3 3 0 0 16
0 1 2
3 4 5
6 7 8
4 4 1 1 3 3 2 2 4 4 1 1 3 3 2 2


์ถœ๋ ฅ

0
0
0
6
0
8
0
2
0
8
0
2
0
8
0
2


My Sol A : ๋ฐฐ์—ด ์ด์šฉ

I, J, ni, nj, K = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
movearr = list(map(lambda x:int(x)-1, input().split()))
movedelta = ((0,1),(0,-1),(-1,0),(1,0))
c = [0]*6

for nd in movearr:
    di, dj = movedelta[nd]
    si, sj = ni+di, nj+dj
    if not (0<=si<I and 0<=sj<J): continue

    # ๊ฐ’ ๋ฐ”๊พธ๊ธฐ
    if mat[si][sj]:
        c[nd] = mat[si][sj]
        mat[si][sj] = 0
    else:
        mat[si][sj] = c[nd]

    # ํ๋ธŒ ์žฌ๋ฐฐ์น˜
    if nd==0:
        c[1], c[5], c[0], c[4] = c[5], c[0], c[4], c[1]

    elif nd==1:
        c[5], c[0], c[4], c[1] = c[1], c[5], c[0], c[4]

    elif nd==2:
        c[3], c[5], c[2], c[4] = c[5], c[2], c[4], c[3]

    else:
        c[5], c[2], c[4], c[3] = c[3], c[5], c[2], c[4]

    print(c[4])
    ni, nj = si, sj

์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ํ•˜๋“œ์ฝ”๋”ฉ ๊ฐ™์ง€๋งŒ ์ฃผ์‚ฌ์œ„์˜ ๊ฐ’์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ทœ์น™๋งŒ ๋”ฐ์„œ ์ง์ ‘ ๊ตํ™˜ํ•ด์ค€ ๋ฐฉ์‹์ด๋‹ค.

์ด๋™๋ฐฉํ–ฅ์˜ ์ด๋™ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋‹ค์Œ ์ด๋™์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ , ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ด๋™ ์ขŒํ‘œ์˜ ๊ฐ’์„ ํ™•์ธํ•ด 0์ด ์•„๋‹ˆ๋ฉด ๋งž๋‹ฟ๋Š” ์ฃผ์‚ฌ์œ„์˜ ๋ฉด์— ๊ฐ’์„ ์ ์šฉํ•ด์ฃผ๊ณ , ์ขŒํ‘œ ๊ฐ’์„ 0 ์œผ๋กœ ๋ฐ”๊พผ๋‹ค. ๋งŒ์•ฝ 0์ด๋ฉด ์ขŒํ‘œ๊ฐ’์€ ์ฃผ์‚ฌ์œ„์™€ ๋งž๋‹ฟ๋Š” ๋ฉด์˜ ๊ฐ’์ด๋‹ค.

์ดํ›„ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ด๋™๋˜๋Š” ๊ฐ’๋“ค์„ ํ•˜๋“œ์ฝ”๋”ฉ์ฒ˜๋Ÿผ ์ง์ ‘ ๊ตํ™˜ํ•ด์ฃผ์—ˆ์œผ๋ฉฐ, ๋™๊ณผ ์„œ, ๋‚จ๊ณผ ๋ถ ๋ฐฉํ–ฅ์œผ๋กœ ์„œ๋กœ ์ขŒํ‘œ๋ฅผ ๋น„์Šทํ•œ ๊ณ„์—ด๋กœ ๊ตํ™˜ํ•œ๋‹ค. ๋“ฑํ˜ธ์˜ ์•ž๋’ค๋งŒ ๋ฐ”๋€Œ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ดํ›„ ์ƒ๋‹จ์— ํ•ด๋‹นํ•˜๋Š” c[4]๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ด๋™์ขŒํ‘œ๋กœ ๊ฐฑ์‹ ํ•˜์—ฌ ๋‹ค์Œ ์ด๋™์„ ์ค€๋น„ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

์ฃผ์‚ฌ์œ„๋Š” ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ, ์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋”•์…”๋„ˆ๋ฆฌ ํ•˜๋ฉด ์ข€ ๋” ์–ด๋• ์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.


My Sol B : ๋”•์…”๋„ˆ๋ฆฌ ์ด์šฉ

I, J, ni, nj, K = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(I)]
movearr = list(map(int, input().split()))
movedelta = ((), (0,1),(0,-1),(-1,0),(1,0))
dirdict = {1:'e', 2:'w', 3:'n', 4:'s'}
dicedict = {}
for t in 'newsud':
    dicedict[t] = 0

for nd in movearr:
    di, dj = movedelta[nd]
    si, sj = ni+di, nj+dj
    if not (0<=si<I and 0<=sj<J): continue

    # ๊ฐ’ ๋ฐ”๊พธ๊ธฐ
    if mat[si][sj]:
        dicedict[dirdict[nd]] = mat[si][sj]
        mat[si][sj] = 0
    else:
        mat[si][sj] = dicedict[dirdict[nd]]

    # ํ๋ธŒ ์žฌ๋ฐฐ์น˜
    if nd==1:
        dicedict['w'], dicedict['d'], dicedict['e'], dicedict['u'] =\
        dicedict['d'], dicedict['e'], dicedict['u'], dicedict['w']

    elif nd==2:
        dicedict['d'], dicedict['e'], dicedict['u'], dicedict['w'] = \
        dicedict['w'], dicedict['d'], dicedict['e'], dicedict['u']

    elif nd==3:
        dicedict['s'], dicedict['d'], dicedict['n'], dicedict['u'] = \
        dicedict['d'], dicedict['n'], dicedict['u'], dicedict['s']

    else:
        dicedict['d'], dicedict['n'], dicedict['u'], dicedict['s'] = \
        dicedict['s'], dicedict['d'], dicedict['n'], dicedict['u']


    print(dicedict['u'])
    ni, nj = si, sj

๋”•์…”๋„ˆ๋ฆฌ๋กœ๋„ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋ดค๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋ฐฉํ–ฅ์„ lambda ํ•จ์ˆ˜๋กœ 1์„ ๋นผ์ฃผ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ด๋„ ๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ๊ตํ™˜์ด ๋‹ค์†Œ ์ง๊ด€์ ์ด๋ผ๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ๋„ˆ๋ฌด ๊ธธ๊ฒŒ ํ•ด์„œ ์ฝ”๋“œ๊ธธ์ด๊ฐ€ 2๋ฐฐ๊ฐ€๋Ÿ‰ ๊ธธ์–ด์ง„ ์ ๋„ ๋ฌธ์ œ์˜€๊ณ , ์‹œ๊ฐ„ ์ž์ฒด๊ฐ€ 72ms์—์„œ 80ms๋กœ ์†Œํญ ์ฆ๊ฐ€ํ–ˆ๋‹ค.

๋”•์…”๋„ˆ๋ฆฌ ํ˜ธ์ถœ์—์„œ ์ƒ๊ธฐ๋Š” ์–ด๋–ค ๋”œ๋ ˆ์ด์ง€ ์•Š๋‚˜ ์‹ถ๊ณ , ๊ทธ๋ž˜๋„ ๋„์ „์— ์˜์˜๋ฅผ ๋‘”๋‹ค.


๊ฒฐ๊ณผ

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

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