[백준 파이썬]17140 이차원 배열과 연산
문제
입력
첫째 줄에 r,ck가 주어지며
둘째 줄부터 배열 A에 들어 있는 수가가 주어진다
출력
A[r][c]=k 가 되기 위한 최소 시간을 출력하고 만약 100초가 지나도 k에 도달하지 못한다면 -1을 출력한다
풀이
1. 행과 열의 갯수를 저장
2. 조건에 R 연산과 C연산을 수행하면 된다
3. 이때 R 연산과 C연산은 방식은 서로 같지만 진행하는 시작점이 행이냐 열이냐에 차이이다 그렇기에
일단 행에 대한 연산을 완성하고 그 후 열과 행을 바꿔서 출력해 줄 수 있는 함수를 C연산할 때 추가해 주면
R연산에 사용한 방법으로도 C연산을 돌릴 수 있다
4. R연산할 때 나는 딕셔너리를 이용하여 현재 행에 대해서 원소의 개수값을 카운트하였고 그 후
(여기 저 주의할 점은 빈 공간일 때 넣어둘값은 카운트하면 안 된다 또한 정렬에도 포함되면 안된다 그렇기에 나는 이 문제 조건에서 나올 수 없는 수를 이용하여 정렬 돌려도 한생 제자리를 유지하도록 만들었다)
딕셔너리. item()을 이용하면 key와 value 값을 튜플로 뭉쳐서 리스트로 만들어
정렬을 하였다 정렬을 할 때에는 람다 정렬을 이용하였는데 개수를 기준으로 먼저 정렬하고 그 후 값에 대해서 정렬한다
코드
def transpose(matrix):
rows = len(matrix)
cols = len(matrix[0])
transposed_matrix = [[0 for _ in range(rows)] for _ in range(cols)]
for i in range(rows):
for j in range(cols):
transposed_matrix[j][i] = matrix[i][j]
return transposed_matrix
def rctranspose(array):
R = len(array)
C = len(array[0])
max_len = 0
for j in range(R):
di = {}
for k in array[j]:
if k != 1000000000:
if k in di:
di[k] += 1
else:
di[k] = 1
di_list = list(di.items())
di_list.sort(key=lambda x: (x[1], x[0]))
array[j] = []
for x, y in di_list:
array[j].append(x)
array[j].append(y)
if max_len < len(array[j]):
max_len = len(array[j])
for k in range(R):
if max_len > len(array[k]):
for t in range(max_len - len(array[k])):
array[k].append(1000000000)
return array
r, c, kk = map(int, input().split())
array = [list(map(int, input().split())) for _ in range(3)]
R = len(array)
C = len(array[0])
if R >= r and C >= c and array[r - 1][c - 1] == kk:
print(0)
else:
for i in range(100):
R = len(array)
C = len(array[0])
if R >= C:
array=rctranspose(array)
else:
array = transpose(array)
array=rctranspose(array)
array = transpose(array)
R = len(array)
C = len(array[0])
if R > 100:
array = array[:100]
if C > 100:
array = transpose(array)
array = array[:100]
array = transpose(array)
if R >= r and C >= c:
if array[r - 1][c - 1] == kk:
print(i + 1)
break
if i == 99:
print(-1)
반응형
'파이썬 문제풀이 > 구현' 카테고리의 다른 글
[백준 파이썬] 1644 소수의 연속합 (1) | 2024.04.05 |
---|---|
[백준 파이썬] 4307번 개미 (0) | 2024.03.30 |
[백준 파이썬] 2505번 두 번 뒤집기 (1) | 2024.03.09 |
[삼성 sw 파이썬] 19113 식료품 가게 (1) | 2024.02.25 |
백준8979 올림픽 파이썬 풀이 (1) | 2024.01.12 |