[BOJ][๐ก4][๋ฐฑ์ค#14499] ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
ํฌ๊ธฐ๊ฐ 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๋ก ์ํญ ์ฆ๊ฐํ๋ค.
๋์ ๋๋ฆฌ ํธ์ถ์์ ์๊ธฐ๋ ์ด๋ค ๋๋ ์ด์ง ์๋ ์ถ๊ณ , ๊ทธ๋๋ ๋์ ์ ์์๋ฅผ ๋๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ