흙금이네 블로그

[BOJ] 17140 - 이차원 배열과 연산 (Python) 본문

알고리즘

[BOJ] 17140 - 이차원 배열과 연산 (Python)

흙금 2023. 3. 18. 14:21

 

 

아이디어

 

조건에 따라 R 연산과 C 연산을 구현한다.

 

 

풀이

 

import sys

input = sys.stdin.readline

def R():
    global A, M
    new_A = [[0]*101 for _ in range(101)]
    for i in range(1, N+1):
        temp = dict()
        for j in range(1, M+1):
            if A[i][j]:
                temp[A[i][j]] = temp.get(A[i][j], 0)+1
        j = 1
        for n1, n2 in sorted(temp.items(), key=lambda x: (x[1], x[0]))[:50]:
            new_A[i][j] = n1
            new_A[i][j+1] = n2
            j += 2
        if j-1 > M:
            M = j-1
    A = new_A

def C():
    global A, N
    new_A = [[0]*101 for _ in range(101)]
    for j in range(1, M+1):
        temp = dict()
        for i in range(1, N+1):
            if A[i][j]:
                temp[A[i][j]] = temp.get(A[i][j], 0)+1
        i = 1
        for n1, n2 in sorted(temp.items(), key=lambda x: (x[1], x[0]))[:50]:
            new_A[i][j] = n1
            new_A[i+1][j] = n2
            i += 2
        if i-1 > N:
            N = i-1
    A = new_A

r, c, k = map(int, input().split())
N = M = 3
A = [[0]*101 for _ in range(101)]
for i in range(1, 4):
    A[i][1:4] = list(map(int, input().split()))
res = -1
if A[r][c] == k:
    res = 0
else:
    for i in range(1, 101):
        if N >= M:
            R()
        else:
            C()
        if A[r][c] == k:
            res = i
            break
print(res)

 

Comments