본문 바로가기
알고리즘 algorithms

[백준 17822 Python 파이썬] 원판 돌리기

by 괴로운데이빗 2020. 9. 15.

시웠다 히히

n, m, t = map(int, input().split())

base_pan = []
for i in range(n) :
    base_pan.append( list(map(int, input().split())) )

def run(base_pan) :
    for i in range(t) :
        x, d, k = map(int, input().split()) #몇번째판 배수, 시계/반시계, 몇칸돌릴지

        rotate_cnt = 1
        while ( x*rotate_cnt-1 < n ) :
            if(d==0) :#시계
                for k_ in range(k) :
                    base_pan[ x*rotate_cnt-1 ] = [base_pan[ x*rotate_cnt-1 ][-1]]+base_pan[ x*rotate_cnt-1 ][:-1]
            else :
                for k_ in range(k) :
                    base_pan[ x*rotate_cnt-1 ] = base_pan[ x*rotate_cnt-1 ][1:]+[base_pan[ x*rotate_cnt-1 ][0]]

            rotate_cnt = rotate_cnt+1
        
        same_arr = []
        for i in range(n) :
            for j in range(m) :
                basic_value = base_pan[i][j]
                if (basic_value=='.'):
                    continue
                same_cnt = 0
                if (i-1>=0):
                    if(basic_value==base_pan[i-1][j]) :
                        same_arr.append([i-1,j])
                        same_cnt = same_cnt+1
                if (i+1<n) :
                    if (basic_value==base_pan[i+1][j]) :
                        same_arr.append([i+1,j])
                        same_cnt = same_cnt+1
                if ( basic_value==base_pan[i][j-1] ) :
                    same_arr.append([i,j-1])
                    same_cnt = same_cnt+1
                if ( j+1<m ) :
                    if (basic_value==base_pan[i][j+1]) :
                        same_arr.append([i,j+1])
                        same_cnt = same_cnt+1
                if( same_cnt>0 ) :
                    same_arr.append([i,j])
                    same_cnt = same_cnt+1
                    
        if( len(same_arr)>0 ) :
            for i in same_arr :
                base_pan[i[0]][i[1]] = '.'
        else :
            base_pan = mean_calc(base_pan)
            
    dap = 0
    for i in range(n) :
            for j in range(m) :
                if(base_pan[i][j]!='.') :
                    dap = dap+base_pan[i][j]
    return dap
    
            
            
def mean_calc(base_pan) :
    cnt = 0
    sum_ = 0
    for i in range (n) :
        for j in range( m) :
            if(base_pan[i][j]!='.') :
                cnt = cnt+1
                sum_ = sum_+base_pan[i][j]
    if(cnt!=0) :
        mean = sum_/cnt
        for i in range (n) :
            for j in range (m) :
                if(base_pan[i][j]!='.') :
                    if(base_pan[i][j]>mean) :
                        base_pan[i][j]=base_pan[i][j]-1
                    elif (base_pan[i][j]<mean) :
                        base_pan[i][j]=base_pan[i][j]+1
    return base_pan
    
print(run(base_pan))