ํ๋ก๊ทธ๋๋จธ์ค์์ ์ ๊ณตํ๋ ์นด์นด์ค 2020๋ ์ ์ ๊ฐ๋ฐ์ ๋ธ๋ผ์ธ๋ ์ฝ๋ฉ ํ ์คํธ 1์ฐจ ๋ฌธ์ 3๋ฒ์ ํ์ด ๋ณด์๋ค.
https://programmers.co.kr/learn/courses/30/lessons/60059
ํด๋น ๋ฌธ์ ๋ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ๋ฅผ ์์๋ด๋ ๊ฒ๋ณด๋ค ๊ตฌํ๋ ฅ์ด ํ์ํ ๋ฌธ์ ์๋ค๊ณ ์๊ฐํ๋ค.
ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ ํ ์ฌํญ์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ ์์ ํ์์ผ๋ก ํ์ด๊ฐ ๊ฐ๋ฅํ๋ฐ, ํ๋ ฌ์ ํ์ ๊ณผ ๋ฒ์๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ 2์ฐจ์ ํ๋ ฌ์ ํ์ ์ ๊ตฌํํด์ผ ํ๋ค.
ํ์ ๊ตฌํ์ ๊ฐ๋จ ํ์ง๋ง, ์ต์ํ์ง ์๋ค๋ฉด, ๋ฐ๋ก ์๊ฐ๋์ง ์์ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ํ ๋ฒ์ฏค ์ ๋ฆฌํด ๋์ผ๋ฉด ๋์์ด ๋ ๋ฏํ๋ค.
๐ 2์ฐจ์ ํ๋ ฌ ํ์
ํด๋น ๋ฌธ์ ์์๋ ํ๊ณผ ์ด์ด ๋์ผํ ์ ์ฌ๊ฐํ์ด ๋ฌธ์ ๋ก ์ฃผ์ด์ก์ง๋ง, ์ผ๋ฐ์ ์ธ ์ํฉ์ ๊ณ ๋ คํด์ ํ๊ณผ ์ด์ด ๋ค๋ฅธ n x m ํ๋ ฌ์ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์์ผ ๋ณด์๋ค.
์์ ๊ทธ๋ฆผ์ฒ๋ผ 3 x 4 ํ๋ ฌ์ ํ์ ํ 4 x 3 ํ๋ ฌ์ด ๋์ด์ผ ํ๋ค. (n x m -> m x n)
๊ธฐ์กด ํ๋ ฌ์ ์ด(column)์ ์ด๋์ ๋ณํ๋ ํ๋ ฌ์ ํ(row)์ ์ด๋์ผ๋ก
๊ธฐ์กด ํ๋ ฌ์ ํ(row)์ ์ด๋์ ๋ณํ๋ ํ๋ ฌ์ ์ด(column)์ ์ญ ์ด๋์ผ๋ก ์์ง์ธ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
def rotate(arr):
n = len(arr) # ๊ธฐ์กด ํ๋ ฌ์ ํ์ ๊ธธ์ด
m = len(arr[0]) # ๊ธฐ์กด ํ๋ ฌ์ ์ด์ ๊ธธ์ด
new_arr = [[0] * n for _ in range(m)] # ์๋ก์ด ํ๋ ฌ ์์ฑ(0์ผ๋ก ์ด๊ธฐํ), ๊ธฐ์กด ํ๋ ฌ๊ณผ ํ, ์ด์ด ๋ค๋ฐ๋
for i in range(n): # ๊ธฐ์กด ํ๋ ฌ์ ํ ์ด๋
for j in range(m): # ๊ธฐ์กด ํ๋ ฌ์ ์ด ์ด๋
new_arr[j][n - 1 - i] = arr[i][j]
return new_arr
์ ๊ทธ๋ฆผ์ ์ฝ๋๋ก ํํํ๋ฉด ์์ ๊ฐ๋ค.
์๋ก์ด ํ๋ ฌ(new_arr)์ ํ์ ๊ธฐ์กด ํ๋ ฌ์ ์ด(j)๊ณผ ๊ฐ๋ค.
์๋ก์ด ํ๋ ฌ์ ์ด์ ๊ธฐ์กด ํ๋ ฌ์ ํ(i)์ ์ญ๊ณผ ๊ฐ๋ค. ๋ค๋ฅด๊ฒ ํํํ๋ฉด ๊ธฐ์กด ํ๋ ฌ์ ํ(row)์ ์์น๋ฅผ ์๋ก์ด ํ๋ ฌ์ ์ด(column) ๊ฐ์ฅ ๋ค์์๋ถํฐ ๋์ ํด์ฃผ๋ฉด ๋๋ค. (n -1 - i)
์๋ก์ด ํ๋ ฌ์ ์ด(column)์ ๊ธธ์ด๋ ๊ธฐ์กด ํ๋ ฌ์ ํ(row)์ ๊ธธ์ด์ ๊ฐ๊ณ ๋ฐฐ์ด์์ index ์ ๊ทผ์ ์ํด์ n - 1๋ถํฐ ์ ๊ทผํ๋ค.
๋ฐ์๊ณ ํ์
def rotate(arr):
n = len(arr) # ๊ธฐ์กด ํ๋ ฌ์ ํ์ ๊ธธ์ด
m = len(arr[0]) # ๊ธฐ์กด ํ๋ ฌ์ ์ด์ ๊ธธ์ด
new_arr = [[0] * n for _ in range(m)] # ์๋ก์ด ํ๋ ฌ ์์ฑ(0์ผ๋ก ์ด๊ธฐํ), ๊ธฐ์กด ํ๋ ฌ๊ณผ ํ, ์ด์ด ๋ค๋ฐ๋
for i in range(n): # ๊ธฐ์กด ํ๋ ฌ์ ํ ์ด๋
for j in range(m): # ๊ธฐ์กด ํ๋ ฌ์ ์ด ์ด๋
new_arr[m - 1 - j][i] = arr[i][j]
return new_arr
๋ฐ์๊ณ ๋ฐฉํฅ์ ํ์ ์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์์ ๊ฐ์ด ํํํ ์ ์๋ค.