๋ฌธ์
๋ฐ๋์ด ๋ถ์ด์ค๋ ๋ฐฉํฅ๊ณผ ํ์ ์ซ์๊ฐ ์ฃผ์ด์ง๊ณ
๋ง์ฝ ์ธ์ ํ ํ์ ๊ฐ์ ์ด์ ๊ฐ์ ์ซ์๊ฐ ์๋ค๋ฉด ๋ฐ๋ ๋ฐฉํฅ์์ ๋ฐ๋์ ๋ถ์ด์ค๊ฒ ํ๋ฉด ๋๋ค.
(๋ฐ๋์ด ๋ถ๋ค = ํ ์นธ์ฉ ๋ฐ์ด๋ธ๋ค)
์ฃผ์ด์ง ๋ฐ๋์ ์ ๋ณด ์๋งํผ ๋ฐ๋ณตํด์ ์งํํ๋ค.
ํ์ด ๋ฐฉ์
def rotate(row, direction):
if direction == 'L':
tmp = graph[row][-1]
for i in range(m-1, 0, -1):
graph[row][i] = graph[row][i-1]
graph[row][0] = tmp
elif direction == 'R':
tmp = graph[row][0]
for i in range(m-1):
graph[row][i] = graph[row][i+1]
graph[row][-1] = tmp
์ฐ์ ํ ์นธ์ฉ ๋ฐ์ด ๋ด๋ ํจ์๋ฅผ ๋ง๋ค์๋ค.
์ผ์ชฝ์์ ๋ถ์ด ์ค๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ์ฉ ๋ฐ๊ณ , ์ค๋ฅธ์ชฝ์์ ๋ถ์ด ์ค๋ฉด ์ผ์ชฝ์ผ๋ก ํ ์นธ์ฉ ๋ฏผ๋ค.
def infection(row, direction):
if direction == 'U':
if row - 1 >= 0:
for i in range(m):
if graph[row][i] == graph[row-1][i]:
return True
elif direction == 'D':
if row + 1 < n:
for i in range(m):
if graph[row][i] == graph[row+1][i]:
return True
return False
๋ค์ ์ธ์ ํ ํ์ ๊ฐ์ ์ซ์๊ฐ ์๋ ์ง ํ์ธํ ํ ๋ฐ๋ ์ ํ๋ฅผ ์งํํ ๊ฒ์ธ์ง ํ์ธํ๋ค.
๋ง์ฝ ์ ํ ๊ฐ๋ฅํ๋ฉด True๋ฅผ ๋ฐํํ๋ค.
n, m, q = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
for _ in range(q):
r, d = input().split()
r = int(r) - 1
rotate(r, d)
next_d = 'R' if d=='L' else 'L'
direction = 'U'
for i in range(r, 0, -1):
if infection(i, direction):
rotate(i-1, next_d)
next_d = 'R' if next_d=='L' else 'L'
else:
break
next_d = 'R' if d=='L' else 'L'
direction = 'D'
for i in range(r, n):
if infection(i, direction):
rotate(i+1, next_d)
next_d = 'R' if next_d=='L' else 'L'
else:
break
for i in range(n):
print(*graph[i])
๋ฐ๋์ด ์์ํ ํ์์ ์์๋๋ก ์ ํ๋ฅผ ์์ํ๋ค.
์ ํ ๊ฐ๋ฅํด์ True๋ฅผ ๋ฐํ๋ฐ์ผ๋ฉด rotate๋ฅผ ์งํํ๊ณ , ๋ฐ๋์ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊พผ๋ค.
๋ฐ๋ ์ ๋ณด ์๋งํผ ์งํํ๊ณ ์ต์ข ๊ฑด๋ฌผ์ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ฒด ์ฝ๋ (Python3 / 217ms / 27MB)
def rotate(row, direction):
if direction == 'L':
tmp = graph[row][-1]
for i in range(m-1, 0, -1):
graph[row][i] = graph[row][i-1]
graph[row][0] = tmp
elif direction == 'R':
tmp = graph[row][0]
for i in range(m-1):
graph[row][i] = graph[row][i+1]
graph[row][-1] = tmp
def infection(row, direction):
if direction == 'U':
if row - 1 >= 0:
for i in range(m):
if graph[row][i] == graph[row-1][i]:
return True
elif direction == 'D':
if row + 1 < n:
for i in range(m):
if graph[row][i] == graph[row+1][i]:
return True
return False
n, m, q = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
for _ in range(q):
r, d = input().split()
r = int(r) - 1
rotate(r, d)
next_d = 'R' if d=='L' else 'L'
direction = 'U'
for i in range(r, 0, -1):
if infection(i, direction):
rotate(i-1, next_d)
next_d = 'R' if next_d=='L' else 'L'
else:
break
next_d = 'R' if d=='L' else 'L'
direction = 'D'
for i in range(r, n):
if infection(i, direction):
rotate(i+1, next_d)
next_d = 'R' if next_d=='L' else 'L'
else:
break
for i in range(n):
print(*graph[i])
๋ฌธ์ ๋งํฌ
https://www.codetree.ai/missions/2/problems/The-1D-wind-blows/description
์ฝ๋ํธ๋ฆฌ | ์ฝ๋ฉํ ์คํธ ์ค๋น๋ฅผ ์ํ ์๊ณ ๋ฆฌ์ฆ ์ ์
๊ตญ๊ฐ๋ํ๊ฐ ๋ง๋ ์ฝ๋ฉ ๊ณต๋ถ์ ๊ฐ์ด๋๋ถ ์ฝ๋ฉ ์์ด๋ณด๋ถํฐ ๊ฟ์ ์ง์ฅ ์ฝํ ํฉ๊ฒฉ๊น์ง, ๊ตญ๊ฐ๋ํ๊ฐ ์์ ํ ์ปค๋ฆฌํ๋ผ์ผ๋ก ์ค๋นํด๋ณด์ธ์.
www.codetree.ai