๋šœ๋ถ€๋‹ˆ์˜ Devlog

[BOJ] 17406.๋ฐฐ์—ด๋Œ๋ฆฌ๊ธฐ4

by ๋šœ๋ถ€๋‹ˆ

 

 

17406๋ฒˆ: ๋ฐฐ์—ด ๋Œ๋ฆฌ๊ธฐ 4

ํฌ๊ธฐ๊ฐ€ N×M ํฌ๊ธฐ์ธ ๋ฐฐ์—ด A๊ฐ€ ์žˆ์„๋•Œ, ๋ฐฐ์—ด A์˜ ๊ฐ’์€ ๊ฐ ํ–‰์— ์žˆ๋Š” ๋ชจ๋“  ์ˆ˜์˜ ํ•ฉ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐฐ์—ด A๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ 1ํ–‰์˜ ํ•ฉ์€ 6, 2ํ–‰์˜ ํ•ฉ์€ 4, 3ํ–‰์˜ ํ•ฉ์€ 15์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋ฐฐ์—ด A์˜

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋Š” NxM ํฌ๊ธฐ์˜ ๋ฐฐ์—ด A๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๋ฐฐ์—ด A์˜ ๊ฐ’์€ ๊ฐ ํ–‰์˜ ํ•ฉ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๋ฐฐ์—ด ํšŒ์ „ ์—ฐ์‚ฐ์€ (r, c, s)๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”๋ฐ, rํ–‰ c์—ด์„ ๋‘˜๋Ÿฌ์‹ผ ์ •์‚ฌ๊ฐํ˜•์„ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ •์‚ฌ๊ฐํ˜•์€ ๊ฐ€์žฅ ์™ผ์ชฝ ์œ—์นธ์ด r-sํ–‰, c-s์—ด, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋žซ์นธ์ด r+sํ–‰, c+sํ–‰์ธ ์ •์‚ฌ๊ฐํ˜•์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, s๊ฐ€ 2์ผ ๊ฒฝ์šฐ

๊ฐ€์žฅ ์™ผ์กฑ ์œ—์นธ์ด r-s+1ํ–‰, c-s+1์—ด, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋žซ์นธ์ด r+s-1ํ–‰, c+s-1ํ–‰์ธ ์ •์‚ฌ๊ฐํ˜•์— ๋Œ€ํ•ด์„œ๋„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํšŒ์ „ ์—ฐ์‚ฐ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ตœ์†Ÿ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์—ฐ์‚ฐ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ˆœ์—ด์„ ๋งŒ๋“ค์–ด์„œ ํšŒ์ „ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, r, c๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ ์‹ค์ œ ์—ฐ์‚ฐ ์‹œ์—๋Š” r-1, c-1์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ์ˆœ์—ด์— ๋Œ€ํ•ด ํšŒ์ „ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ํ›„ ๋ฐฐ์—ด A์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

# ๋ฐฐ์—ด๋Œ๋ฆฌ๊ธฐ4
import sys
input = sys.stdin.readline

def rotation(matrix, r, c, s) : # ํšŒ์ „ ์—ฐ์‚ฐ ํ•จ์ˆ˜
    for i in range(s) :
        r1, c1, r2, c2 = r-s+i, c-s+i, r+s-i, c+s-i # ๊ฐ€์žฅ ์™ผ์ชฝ ์œ—์นธ r,c ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋žซ์นธ r,c ์ €์žฅ
        temp = matrix[r1][c1] # ๊ฐ€์žฅ ์™ผ์ชฝ ์œ—์นธ ์ €์žฅ
        # c1์—ด
        for idx in range(r1, r2) :
            matrix[idx][c1] = matrix[idx+1][c1]
        # r2ํ–‰
        for idx in range(c1, c2) :
            matrix[r2][idx] = matrix[r2][idx+1]
        # c2์—ด
        for idx in range(r2,r1,-1) :
            matrix[idx][c2] = matrix[idx-1][c2]
        # r1ํ–‰
        for idx in range(c2, c1+1, -1) :
            matrix[r1][idx] = matrix[r1][idx-1]
        matrix[r1][c1+1] = temp # ์ €์žฅํ•œ ๊ฐ€์žฅ ์™ผ์กฑ ์œ—์นธ ๊ฐ’์„ ๋ฐ”๋กœ ๋‹ค์Œ ์—ด์— ๋„ฃ์–ด์คŒ
        
    return matrix
    
    

def dfs(L, cur) : # ์ˆœ์—ด์„ ๋งŒ๋“ค์–ด ํšŒ์ „ ์—ฐ์‚ฐ ์‹คํ–‰ ํ›„ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š” ํ•จ์ˆ˜
    global min_
    if L == K :
        opelist = [operation[idx] for idx in visitied]
        copy_matrix = [m[:] for m in matrix]
        for r, c, s in opelist :
            copy_matrix = rotation(copy_matrix, r-1, c-1, s)
        min_ = min(min_, min([sum(temp) for temp in copy_matrix]))
        return
    for i in range(K):
        if visitied[i] == -1 : # ์•„์ง ๊ฐ’์„ ์ฑ„์šฐ์ง€ ์•Š์•˜๋‹ค๋ฉด
            visitied[i] = cur # ํ˜„์žฌ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ธ๋ฑ์Šค ๊ฐ’ ๋Œ€์ž…
            dfs(L + 1, cur + 1)
            visitied[i] = -1

if __name__=="__main__" :
    N, M, K = map(int, input().split())
    matrix = [list(map(int, input().split())) for _ in range(N)]
    operation = [list(map(int, input().split())) for _ in range(K)]

    min_ = 2147000000 # ๋ฐฐ์—ด A์˜ ๊ฐ’์„ ํฐ ์ˆ˜๋กœ ์ดˆ๊ธฐํ™”
    visitied = [-1] * K # ์ˆœ์—ด ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
    dfs(0, 0)
    print(min_)
 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ