import sys
from operator import itemgetter
def solve(A, row_num, col_num):
for t in range(101): # t=100까지 반복
transpose = False # 행렬 뒤집기
if 0 <= R-1 < row_num and 0 <= C-1 < col_num and A[R-1][C-1] == K:
return t
if row_num > 100: # 100이 넘어가는 경우 앞의 100까지만 본다.
row_num = 100 # 이 코드에서는 range를 쓰므로 슬라이싱 없이 row, col의 길이만 손봐주면 된다.
if col_num > 100:
col_num = 100
if row_num < col_num: # 행 < 열의 경우 행렬을 뒤집어 C 연산을 수행해야 한다.
transpose = True # Flag를 설정하고 연산 이후 뒤집은 행렬을 다시 뒤집는다.
A = list(zip(*A))
row_num, col_num = col_num, row_num # 행렬을 뒤집으면 row, col의 숫자도 바뀜
maxLine = 0 # 가장 긴 줄을 저장하고 여기에 맞춰서 0을 추가하기 위함
for r in range(row_num):
search = {}
for c in range(col_num):
if A[r][c] != 0 and A[r][c] not in search:
search[A[r][c]] = A[r].count(A[r][c])
search = sorted(search.items(), key=itemgetter(1, 0)) # 빈도수, 숫자크기 순으로 정렬
A[r] = [] # sorted로 나온 [(), (), ()]를 한 리스트에 합침
for key, val in search:
A[r].extend([key, val])
maxLine = max(maxLine, len(A[r]))
for r in range(row_num): # maxLine만큼 0으로 채우기
l = len(A[r])
if l < maxLine:
A[r].extend([0] * (maxLine-l))
if transpose: # C 연산의 경우 다시 행렬을 되돌림
A = list(zip(*A))
row_num, col_num = len(A), len(A[0])
return -1
input = sys.stdin.readline
R, C, K = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(3)]
print(solve(A, 3, 3))
'알고리즘 > 시뮬레이션' 카테고리의 다른 글
17837번. 새로운 게임 2 (0) | 2020.05.03 |
---|---|
17822번. 원판 돌리기 (0) | 2020.05.02 |
SWEA 2382번. 미생물 격리 (0) | 2020.04.24 |
17144번. 미세먼지 안녕! (0) | 2020.04.21 |
16235번. 나무 재테크 (0) | 2020.04.20 |