r, c, k 정보 및 배열을 저장해준다
# r,c,k 정보 저장
info = input().strip().split(' ')
for i in range(len(info)):
info[i] = int(info[i])
# 배열 저장
arr = []
for _ in range(3):
row = input().strip().split(' ')
for i in range(len(row)):
row[i] = int(row[i])
arr.append(row)
sec 값(초)이 100 이하일 때 계속 루프를 돌린다
IndexError를 except 해준 이유는 A[r][c]에 들어있는 값이 k가 맞는지 확인하는 과정을 거칠 때, A[r][c] 값이 없는 경우가 존재하기 때문
→ 쓰면 안되나 싶었는데 0이 들어가는 자리도 아니고 넘어가는 이유가 그냥 ‘자리에 없어서’ 하나라,,, 썼다!
while sec <= 100:
try:
if arr[info[0]-1][info[1]-1] == info[2]:
flag = True
break
except IndexError:
pass
문제에서 하라는대로 하면 된다
숫자의 갯수와 크기를 기준으로 정렬한 후, 새로운 배열을 만들어준다
이후 행 크기의 최댓값을 구하고 빈 공간은 0으로 채운다
row_num = len(arr)
col_num = len(arr[0])
# 행 or 열의 최대 사이즈 초깃값 설정
max_size = 0
# R연산
if row_num >= col_num:
idx = 0
for i in arr:
row_unique = list(set(i))
# 0이 있을 경우 제거
if row_unique.count(0):
row_unique.remove(0)
unique_num = []
for s in row_unique:
unique_num.append((s, i.count(s)))
# 갯수 -> 크기 순
sorted_lst = sorted(unique_num, key=lambda x: (x[1], x[0]))
i = []
for s in sorted_lst:
(num, count) = s
i.append(num)
i.append(count)
# arr & 행 크기 최댓값 갱신
max_size = max(max_size, len(i))
arr[idx] = i
idx += 1
# 빈 공간 0 채우기
for i in arr:
if len(i) < max_size:
i += [0]*(max_size-len(i))
R연산과 동일한 로직이지만 열을 기준으로 잡기 때문에 조금 더 복잡할 뿐이다
파이썬 내장함수 zip()만 쓰면 바로 전치행렬을 구할 수 있는게,,, 좀 신기했다
# C연산
else:
arr_col = []
for i in range(len(arr[0])):
col_lst = []
for s in arr:
col_lst.append(s[i])
col_unique = list(set(col_lst))
# 0이 있을 경우 제거
if col_unique.count(0):
col_unique.remove(0)
unique_num = []
for s in col_unique:
unique_num.append((s, col_lst.count(s)))
# 갯수 -> 크기 순
sorted_lst = sorted(unique_num, key=lambda x: (x[1], x[0]))
col = []
for s in sorted_lst:
(num, count) = s
col.append(num)
col.append(count)
# 열 크기 최댓값 갱신
max_size = max(max_size, len(col))
arr_col.append(col)
# 빈 공간 0 채우기
for i in arr_col:
if len(i) < max_size:
i += [0]*(max_size-len(i))
arr = list(zip(*arr_col))
문제를 풀 때 사용해야 하는 변수가 많아 변수 네이밍이 깔끔하지 못 했던 것 같다
import sys
input = sys.stdin.readline
# r,c,k 정보 저장
info = input().strip().split(' ')
for i in range(len(info)):
info[i] = int(info[i])
# 배열 저장
arr = []
for _ in range(3):
row = input().strip().split(' ')
for i in range(len(row)):
row[i] = int(row[i])
arr.append(row)
sec = 0
flag = False
while sec <= 100:
try:
if arr[info[0]-1][info[1]-1] == info[2]:
flag = True
break
except IndexError:
pass
row_num = len(arr)
col_num = len(arr[0])
# 행 or 열의 최대 사이즈 초깃값 설정
max_size = 0
# R연산
if row_num >= col_num:
idx = 0
for i in arr:
row_unique = list(set(i))
# 0이 있을 경우 제거
if row_unique.count(0):
row_unique.remove(0)
unique_num = []
for s in row_unique:
unique_num.append((s, i.count(s)))
# 갯수 -> 크기 순
sorted_lst = sorted(unique_num, key=lambda x: (x[1], x[0]))
i = []
for s in sorted_lst:
(num, count) = s
i.append(num)
i.append(count)
# arr & 행 크기 최댓값 갱신
max_size = max(max_size, len(i))
arr[idx] = i
idx += 1
# 빈 공간 0 채우기
for i in arr:
if len(i) < max_size:
i += [0]*(max_size-len(i))
# C연산
else:
arr_col = []
for i in range(len(arr[0])):
col_lst = []
for s in arr:
col_lst.append(s[i])
col_unique = list(set(col_lst))
# 0이 있을 경우 제거
if col_unique.count(0):
col_unique.remove(0)
unique_num = []
for s in col_unique:
unique_num.append((s, col_lst.count(s)))
# 갯수 -> 크기 순
sorted_lst = sorted(unique_num, key=lambda x: (x[1], x[0]))
col = []
for s in sorted_lst:
(num, count) = s
col.append(num)
col.append(count)
# 열 크기 최댓값 갱신
max_size = max(max_size, len(col))
arr_col.append(col)
# 빈 공간 0 채우기
for i in arr_col:
if len(i) < max_size:
i += [0]*(max_size-len(i))
arr = list(zip(*arr_col))
sec += 1
if flag:
print(sec)
else:
print(-1)