๋ฌธ์ ์ค๋ช ์ ๊ทธ๋๋ก ๊ตฌํํ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ์, ์ข๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๊ณ ์ํด์ผ ํ์.
๐ผ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/16926
- ํฐ์ด: ์ค๋ฒ I
- ๋ถ๋ฅ: ๊ตฌํ
โ TRIAL 1.
์ฝ๋
def move(v1, v2, direction, arr, ans):
if direction == 'l':
x = v1[0]
for y in range(v1[1], v2[1]):
ans[x][y] = arr[x][y+1]
elif direction == 'u':
y = v1[1]
for x in range(v1[0], v2[0]):
ans[x][y] = arr[x+1][y]
elif direction == 'r':
x = v1[0]
for y in range(v2[1]+1, v1[1]+1):
ans[x][y] = arr[x][y-1]
else: # 'd'
y = v1[1]
for x in range(v2[0]+1, v1[0]+1):
ans[x][y] = arr[x-1][y]
return ans
N, M, R = map(int, input().split())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
ans = [[0 for _ in range(M)] for _ in range(N)]
num_circle = min(N//2, M//2)
for r in range(R):
for i in range(num_circle):
v = [(i, i), (i, M-i-1), (N-i-1, M-i-1), (N-i-1, i), (i, i)]
d = ['l', 'u', 'r', 'd']
for j in range(4):
ans = move(v[j], v[j+1], d[j], arr, ans)
arr = [ans_i[:] for ans_i in ans]
for ans_i in ans:
print(' '.join(map(str, ans_i)))
์ฝ๋ ์ค๋ช
- ๊ฐ์ ํ์ group ์์ ์๋ ์์ ๋จ์๋ก ํ์ ์ ํ์ ํ์๋งํผ ์งํํจ.
- ๊ฐ ํ์ ์ ๋ํด, l, u, r, d๋ก ๋ฐฉํฅ์ ์ง์ ํ๊ณ ๋ฐฐ์ด์ ํ์ ์ํด.
ํ๋ฆฐ ์์ธ
์๊ฐ์ด๊ณผ. ๊ฐ ์์๋ค์ด ํ์ ํ๋ฏ๋ก, ์ผ์ ํ์์ ํ์ ์ดํ์๋ ์๋ ์ํ์ ๋์ผํ๊ฒ ๋๋๋ฐ ์ด๋ฅผ ๊ณ ๋ คํ์ง ์์์.
โ TRIAL 2.
์ฝ๋
def move(v1, v2, direction, arr, ans):
if direction == 'l':
x = v1[0]
for y in range(v1[1], v2[1]):
ans[x][y] = arr[x][y+1]
elif direction == 'u':
y = v1[1]
for x in range(v1[0], v2[0]):
ans[x][y] = arr[x+1][y]
elif direction == 'r':
x = v1[0]
for y in range(v2[1]+1, v1[1]+1):
ans[x][y] = arr[x][y-1]
else: # 'd'
y = v1[1]
for x in range(v2[0]+1, v1[0]+1):
ans[x][y] = arr[x-1][y]
return ans
N, M, R = map(int, input().split())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
ans = [arr_i[:] for arr_i in arr]
num_circle = min(N//2, M//2)
for i in range(num_circle):
R_i = R%(2*(M+N-4*i-2))
for _ in range(R_i):
v = [(i, i), (i, M-i-1), (N-i-1, M-i-1), (N-i-1, i), (i, i)]
d = ['l', 'u', 'r', 'd']
for j in range(4):
ans = move(v[j], v[j+1], d[j], arr, ans)
arr = [ans_i[:] for ans_i in ans]
for ans_i in ans:
print(' '.join(map(str, ans_i)))
์์ ํ ๋ถ๋ถ
- ๊ฐ ํ์ ์ ๋ํด์, ํ์ ํ์๋ฅผ ํ์ ํ๋ ์์์ ๊ฐฏ์๋ก ๋๋ ๋๋จธ์ง ๋งํผ๋ง ํ์ ์์ผ์ ํ์ ํ์๋ฅผ ์ต์ํ์ผ๋ก ํ์.
ํ๋ฆฐ ์์ธ
์๊ฐ์ด๊ณผ. ๋ฌธ์ ์์ ์ค๋ช ํ ๋ฐฉ์์ฒ๋ผ ๋งค ํ์ ๋ง๋ค ํ ๋ฒ์ for ๋ฌธ์ ๋๊ฒ ํ๋ฉด iteration ํ์๊ฐ ๋๋ฌด ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ์ ์ ๊ตฌํํด์ผ ํจ.
๐ก Solution
์ฝ๋
N, M, R = map(int, input().split())
arr = []
for _ in range(N):
arr.append(list(map(int, input().split())))
arrT = [list(x) for x in zip(*arr)]
num_circle = min(N//2, M//2) #ํจ๊ป ํ์ ํ๋ group์ ๊ฐ์
for i in range(num_circle):
c_h, c_w = N-2*i-1, M-2*i-1
R_i = R%(2*(c_h+c_w)) #์ต์ ํ์ ํ์
circle_line = arr[i][i:i+c_w] + arrT[i+c_w][i:i+c_h] + arr[i+c_h][i+c_w:i:-1] + arrT[i][i+c_h:i:-1]
new_circle_line = circle_line[R_i:] + circle_line[:R_i]
arr[i][i:i+c_w] = new_circle_line[:c_w] #u
arr[i+c_h][i+1:i+c_w+1] = new_circle_line[2*c_w+c_h-1:c_w+c_h-1:-1] #d
for dx in range(c_h):
arr[i+dx][i+c_w] = new_circle_line[c_w+dx] #r
arr[i+c_h-dx][i] = new_circle_line[2*c_w+c_h+dx] #l
for ans_i in arr:
print(' '.join(map(str, ans_i)))
์ฝ๋ ์ค๋ช
- ๊ฐ์ ํ์ group ์์ ์๋ ์์ ๋จ์๋ก ํ ๋ฒ์ ํ์ ์ ์งํํจ
- ํ์ ํ์๋ฅผ ํ์ ํ๋ ์์์ ๊ฐฏ์๋ก ๋๋์ด ์ต์ ํ์ ํ์๋ฅผ ๊ตฌํจ
- ์ฐ์ , ๊ฐ์ ํ์ group ์์ ์๋ ์์๋ค์ ์ผ๋ ฌ๋ก ํผ์ณ์ ํ๋์ list์ ๋ชจ๋ ๋ด์ (circle_line). ์ด๋ฅผ for ๋ฌธ ์์ด ๊ตฌํํ๊ธฐ ์ํด arr๋ฅผ transposeํ arrT๋ฅผ ์ฒ์์ ์ ์ฅํจ.
- circle_line์ ์๋ฅด๊ณ ์์๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ์์ผ๋ก ํ์ ์ ๊ตฌํ
- ์ด๋ฅผ ๋ค์ arr์ ์์๋๋ก ๋ด์.
์ฃผ์์ฌํญ
- ๋ฌธ์ ์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ์ด ํ์ ํ์๋งํผ ํ์ ์ ๊ตฌํํ๋ฉด, (ํน์ ์ต์ ํ์ ํ์๋งํผ๋ง ๊ตฌํํด๋) ์๊ฐ์ด๊ณผ๊ฐ ๋ธ.
๋ค๋ฅธ ํ์ด
- ํ์ด1: queue์ while๋ฌธ์ ์ด์ฉ
- i๋ฒ์งธ ํ์ group์ ์์์ ์ (i, i)์ด๊ณ , ๊ฐ ํ์ group์ ํฌ๊ธฐ๋ (N, M)๋ถํฐ ์์ํด์ 2์ฉ ์ค์ด๋ ๋ค.
- ๊ฐ ํ์ group์ ๋ํด ์ฐ->ํ->์ข->์ ์์๋ก queue์ appendํ๋ค.
- -R๋งํผ rotateํ๋ค.
- ํ์ ํ queue๋ฅผ ์์๋๋ก popํ์ฌ ๋ค์ ๋ฐฐ์ด์ ๋์ ํ๋ค.
- ๋ด ํ์ด์์ ์ฐจ์ด์ : queue๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ ์ธํ๋ฉด ์ ์ฒด์ ์ธ ๋ก์ง์ ๋ด ์ฝ๋์ ๋น์ทํ๋, ํจ์ฌ ๊น๋ํ๊ณ ์ง๊ด์ ์ด๋ค.์๊ฐ๋ณต์ก๋๋ ๋น์ทํ ๋ฏ.. ํนํ while ๋ฌธ์ ์ด์ฉํด์ ๊ฐ ํ์ group์ ์์์ ๊ณผ h, w๋ฅผ ์ง์ ํ๊ณ , ๋งค iteration๋ง๋ค +1/-2๋ฅผ ํด์ค์ผ๋ก์จ ๊ฐ์ ๋ณ๊ฒฝํด์ ๊น๋ํ๊ฒ ๊ตฌํํ ์ ์์๋ค.
'๐ CS > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 14500๋ฒ] ํ ํธ๋ก๋ฏธ๋ ธ (python/ํ์ด์ฌ) (2) | 2022.09.14 |
---|---|
[๋ฐฑ์ค 7569๋ฒ] ํ ๋งํ (python/ํ์ด์ฌ) (0) | 2022.09.09 |
[๋ฐฑ์ค 2504๋ฒ] ๊ดํธ์ ๊ฐ (python/ํ์ด์ฌ) (0) | 2022.07.01 |
[๋ฐฑ์ค 1697๋ฒ] ์จ๋ฐ๊ผญ์ง (python/ํ์ด์ฌ) (0) | 2022.06.30 |
[๋ฐฑ์ค 1012๋ฒ] ์ ๊ธฐ๋ ๋ฐฐ์ถ (python/ํ์ด์ฌ) (0) | 2022.06.29 |