-
백준 17140) 이차원 배열과 연산 (골드.4)알고리즘 2022. 8. 2. 18:34
https://www.acmicpc.net/problem/17140
문제의 조건에 따라 구현하는 시뮬레이션 문제이다. 조건을 확인하면 다음과 같다.
1) 행의 갯수가 열의 갯수보다 많거나 같으면 R연산을 시행하고 그렇지 않으면 C연산을 실행한다.
2) 연산은 행 및 열의 원소와 원소의 갯수를 나타내고 가장 긴 행이나 열보다 작으면 0으로 채워주는 것을 말한다.
3) 만약 행이나 열이 100보다 크면 100 이상의 열이나 행은 자른다.
4) 한번의 연산은 1초의 시간이 걸리고 A[r][c] 가 k가 될때까지 연산이 실행된다.
R연산이 이루어질 때에는 행과 열을 바꿀 필요가 없지만, C연산이 이루어질때에는 행과 열이 바뀌므로 다시 바꿔줄 때 zip을 이용하도록 하였다.
또 여기서 주의할 점은 처음 r, c가 주어질 때 배열의 시작부분이 1이라고 생각하고 주어지기 때문에 각각 -1을 해주어야 하고,
연산이 이루어질 때 행과 열의 길이가 r, c 보다 작아질 수 있기 때문에 행과 열 길이가 r, c 보다 클때 값을 찾아야한다는 것이다.
import sys r, c, k = map(int, sys.stdin.readline().split()) r-= 1 c-=1 graph = [] for i in range(3): graph.append(list(map(int, sys.stdin.readline().split()))) cnt = 0 def sort_graph(a) : l = [] for i in set(a) : if i == 0 : continue l.append((i, a.count(i))) l = sorted(l, key = lambda x: (x[1], x[0])) result = [] for j in l : result.append(j[0]) result.append(j[1]) return result while True : if cnt > 100 : cnt = -1 break if 0<=r<len(graph) and 0<=c<len(graph[0]) and graph[r][c] == k : break maximum = 0 if len(graph)>= len(graph[0]) : for i in range(len(graph)) : graph[i] = sort_graph(graph[i]) maximum = max(maximum, len(graph[i])) for i in range(len(graph)) : if len(graph[i])<maximum : while len(graph[i])< maximum : graph[i].append(0) for i in range(len(graph)) : if len(graph[i])>100 : graph[i] = graph[i][:100] else : new_graph= [] for j in range(len(graph[0])): l = [] for i in range(len(graph)): l.append(graph[i][j]) new_graph.append(sort_graph(l)) maximum = max(maximum, len(new_graph[j])) for i in range(len(new_graph)) : if len(new_graph[i])<maximum : while len(new_graph[i])< maximum : new_graph[i].append(0) for i in range(len(new_graph)) : if len(new_graph[i])>100 : new_graph[i] = new_graph[i][:100] graph = list(zip(*new_graph)) cnt += 1 print(cnt)
'알고리즘' 카테고리의 다른 글
백준 16234) 인구이동 (골드.5) (0) 2022.08.02 백준 15686) 치킨배달 (골드.5) (0) 2022.08.02 백준 12865) 평범한 배낭 (골드.5) (0) 2022.07.20 백준 11054) 가장 긴 바이토닉 부분 수열 (0) 2022.07.20 알고스팟 : 울타리 잘라내기 (분할정복) (0) 2022.07.04