https://www.acmicpc.net/problem/17140
"""
"""
from collections import Counter
from sys import stdin
input = stdin.readline
"""
1. C연산은 배열 A를 transpose한 뒤 R연산을 하고 다시 transpose를 한 결과와 같다.
-> transpose 과정에서 시간이 걸리긴함
2. Counter를 통해서 각 요소의 개수를 확인했음 결과는 dictionary 형태
3. dictionary를 정렬을 하는데 우선순위는 value, key순으로 정렬
4. 최대 길이를 가지는 행(max_len)을 기준으로 0을 채워넣음
"""
r, c, k = map(int, input().split())
A = [ list(map(int, input().split())) for _ in range(3) ]
time = 0
def R():
copy_a = []
max_len = 0
for tmp in A:
tmp = Counter(tmp) # 숫자와 개수 세기
del tmp[0] # 수를 정렬할 때 0은 무시한다고 문제에 나와 있음
copy_tmp = sorted(tmp.items(), key=lambda x : (x[1], x[0])) # value, key 순서로 정렬
tt = []
for a in copy_tmp: # 정렬된 배열을 옮겨 담는데 길이가 100이 넘어가면 그만 옮김
tt.extend(a)
if len(tt) == 100: break
max_len = max(max_len, len(tt))
copy_a.append(tt)
for ss in copy_a:
ss += [0] * (max_len - len(ss)) # 행의 크기가 커진 곳에 0을 채움
return copy_a
while True:
if time > 100:
break
if r <= len(A) and c <= len(A[0]) and A[r-1][c-1] == k:
break
if len(A) >= len(A[0]):
A = R()
else:
A = list(zip(*A)) # zip()을 이용해 transpose 해줌
A = R()
A = list(zip(*A)) # 다시 zip()을 이용해 transpose 해줌
time += 1
print(-1 if time > 100 else time)
Counter() 함수 : Counter 생성자에 문자열을 인자로 넘기면 각 문자가 문자열에서 몇 번씩 나타나는지를 알려주는 객체가 반환됩니다.
zip() 함수 : 길이가 같은 리스트의 요소를 묶어주는 함수
extend() 함수 : iterable의 모든 아이템을 리스트에 추가합니다. iterable이기 때문에 list, tuple 모두 가능합니다.
골고루 활용할 수 있어야 하는 문제
문제 : https://landlordgang.tistory.com/55
Counter() : https://www.daleseo.com/python-collections-counter/
zip() : https://ooyoung.tistory.com/60
extend() + append(),insert() : https://codechacha.com/ko/python-append-vs-extend/