728x90
문제링크
numpy를 이용해서 남들과 다르게 풀어보기
그치만 코드 실행하면
정상 제출 되지는 않는다는 점!
분명 일반 리스트보다 numpy를 이용하면
코드 실행 속도가 빨라서 좋을텐데 🤔🤔
※ 사용하고자 하는 리스트의 길이가 짧은 경우
zip함수와 numpy의 transpose에 큰 차이가 없겠지만
그 길이가 길어질수록 numpy의 벡터 연산이 더 빠르다
import numpy as np
r,c,k = map(int, input().split())
A = []
for i in range(3):
A.append(list(map(int, input().split())))
def fill_zero(A, max_len):
for a in A:
while len(a) < max_len:
a.append(0)
return A
def cal_row(A):
new_A = []
for a in A:
with_cnt = set()
for i in a:
if i != 0:
with_cnt.add((i, a.count(i)))
sorted_wc = sorted(with_cnt, key=lambda x: (x[1], x[0]))
ee = []
for i in sorted_wc:
ee.append(i[0])
ee.append(i[1])
new_A.append(ee)
max_len = max(map(len, new_A))
return new_A, max_len
def cal_col(A):
new_A = np.array(A).T
new_A = [list(row) for row in new_A]
new_A, max_len = cal_row(new_A)
new_A = fill_zero(new_A, max_len)
new_A = np.array(new_A).T
new_A = [list(row) for row in new_A]
max_len = max(map(len, new_A))
return new_A, max_len
sec = 0
while True:
# 조건 확인 K
if r < len(A[0]) and c < len(A):
if A[r-1][c-1] == k:
print(sec)
break
# 조건 확인 sec
if sec > 100:
print(-1)
break
# 행 열 길이 비교
if len(A[0]) <= len(A):
# 행 연산
new_A, max_len = cal_row(A)
# 0 채우기
A = fill_zero(new_A, max_len)
else:
# 열 연산
new_A, max_len = cal_col(A)
# 0 채우기
A = fill_zero(new_A, max_len)
sec += 1
728x90
'CS(컴퓨터 사이언스) > 알고리즘' 카테고리의 다른 글
[코드트리] 고대 문명 유적 탐사 (0) | 2024.06.10 |
---|---|
[백준] 10989 - 수 정렬하기 3(python) (0) | 2021.12.02 |
[백준] 2751 - 수 정렬하기 2(python) (1) | 2021.11.30 |
[프로그래머스] 타겟넘버 - BFS로 풀기 (0) | 2021.11.19 |
[알고리즘] if, elif, else 와 if, if, if의 차이 (0) | 2021.09.16 |