https://www.acmicpc.net/problem/28298
์๊ฐ ์ด๊ณผ๊ฐ ์๊ธด ๋ฌธ์ . ์ด๋ฒ์ ์ ๋ ฅ๊ฐ ์ ํ์ ๋ณด๊ณ ์๊ฐ์ ๋ง๊ฒ ๋ก์ง์ ์งฐ๋ค๊ณ ์๊ฐํ๋๋ฐ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
๋ก์ง์ ์กฐ๊ธ ์์ ํ๋๊น ํต๊ณผํ๋ค. ์ ๊ทธ๋ฐ์ง ์๊ฐํด ๋ณด๋ ์์ธ์ ์ฐพ์ ์ ์์๋ค.
์ค๊ฐ์ ๋ฆฌ์คํธ์์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ์์๋ฅผ ์ถ๋ ฅํ๋ ๋ฉ์๋๊ฐ ํ์ํ๋ค.
๋ง์ ๋ฐฉ๋ฒ์ด ์์ง๋ง ๋๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๊ณ ์ถ์ด max(arr, key = arr.count)๋ก ๊ตฌํํ๋ค.
len(arr) = n์ด๋ผ ๊ฐ์ ํ๋ฉด, arr.count ๊ฐ n๋ฒ ์คํ๋๋ค. ๋ฐ๋ผ์ ์ ์ฝ๋์ ์๊ฐ๋ณต์ก๋๋ n**2์ด๋ค.
๋ฐ๋ผ์ ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ ์ฝ K * K * ((N/K * M/K )**2)์ด๊ณ ์ต๋ 1 * 1 * ((500 * 500)**2) = 62500000000์ด ๋๋ค. ์๊ฐ์ด๊ณผ๋ ๋ฐ์ํ๋ ๊ฒ ๋น์ฐํ๋ค.
์ค๋์ ๊ตํ: ์๋ก์ด ๋ฐฉ๋ฒ์ ์ธ ๋๋ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ผผ๊ผผํ ๊ณ์ฐํด ๋ณด์.
์์ด๋์ด
1. K * K๋ก ํ์ผ๋ค์ ๋๋ ์ค๋ค.
2. ์์ ๋นจ๊ฐ์์ฒ๋ผ, K * K๋ก ๋๋ ์ง ํ์ผ๋ค์ ๊ฐ ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๋ฒณ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ค.
3. ์ํ๋ฒณ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ์ํ๋ฒณ์ผ๋ก ํ์ผ๋ค์ ๊ต์ฒดํด ์ค๋ค. ๊ต์ฒดํ ํ์ผ ๊ฐ์๋ ์ ์ฅํด ์ค๋ค.
์ ์ฒด ์ฝ๋ (+ ์ฃผ์)
import sys
tiles = [] # N * M ํ์ผ
count_list = [0] * 26 # ์ํ๋ฒณ์ ๊ฐ์๋ฅผ countํด์ฃผ๋ ๋ฆฌ์คํธ
Sum = 0 # ๊ต์ฒดํ ํ์ผ ๊ฐ์
N, M, K = map(int, input().split())
for i in range(N):
tiles.append(list(sys.stdin.readline().rstrip()))
step_num = N * M // K**2 # K * K ๋ก ๋๋ ๊ฐ์
for x in range(K):
for y in range(K): # K * K ํ์์ ๊ฐ๊ฐ์ ์๋ฆฌ
count_list = [0] * 26 # ๊ฐ์ count ๋ฆฌ์คํธ ์ด๊ธฐํ
for i in range(0, N - K+ 1, K):
for j in range(0, M - K + 1, K):
t = tiles[i + x][j + y]
count_list[ord(t) - 65] += 1 # ์ํ๋ฒณ count
max_tile_num = max(count_list)
Sum += step_num - max_tile_num # ๋ณ๊ฒฝํ ํ์ผ ๊ฐ์ ์ถ๊ฐ
max_tile = chr(count_list.index(max_tile_num) + 65) #๊ฐ์ฅ ๊ฐ์๊ฐ ๋ง์ ์ํ๋ฒณ return
for i in range(0, N - K+ 1, K):
for j in range(0, M - K + 1, K):
tiles[i + x][j + y] = max_tile # ํ์ผ ๋ณํ
# ์ถ๋ ฅ
print(Sum)
for line in tiles:
print("".join(line))
์ฝ๋ ์ค๋ช
count_list = [0] * 26 # ๊ฐ์ count ๋ฆฌ์คํธ ์ด๊ธฐํ
for i in range(0, N - K+ 1, K):
for j in range(0, M - K + 1, K):
t = tiles[i + x][j + y]
count_list[ord(t) - 65] += 1 # ์ํ๋ฒณ count
ํ์ผ์ ์ฌ ์ ์๋ ๊ฐ์ด ์ํ๋ฒณ ๋๋ฌธ์๋ง ์ฌ ์ ์๋ค๋ ๊ฑธ ์ด์ฉํด ๊ฐ ์ํ๋ฒณ์ ๊ฐ์๋ฅผ ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ํํํ๋ค.
ord() ํจ์๋ฅผ ํ์ฉํด ์ธ๋ฑ์ค๊ฐ๊ณผ ์ํ๋ฒณ์ ์ผ์น์์ผ์ค๋ค. (ord('A') = 65, chr(65) = 'A')
max_tile_num = max(count_list)
Sum += step_num - max_tile_num # ๋ณ๊ฒฝํ ํ์ผ ๊ฐ์ ์ถ๊ฐ
max_tile = chr(count_list.index(max_tile_num) + 65) #๊ฐ์ฅ ๊ฐ์๊ฐ ๋ง์ ์ํ๋ฒณ return
for i in range(0, N - K+ 1, K):
for j in range(0, M - K + 1, K):
tiles[i + x][j + y] = max_tile # ํ์ผ ๋ณํ
๊ฐ์ฅ ๋ง์ ์ํ๋ฒณ์ ๊ฐ์๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝํ ํ์ผ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
chr() ํจ์๋ฅผ ์ฌ์ฉํด์ ์ํ๋ฒณ์ ๋ฆฌํดํด์ค๋ค.