http://boj.kr/17140 

 

17140번: 이차원 배열과 연산

첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

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

+ Recent posts