https://www.acmicpc.net/problem/17140

 

17140번: 이차원 배열과 연산

첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.

www.acmicpc.net


문제 해결을 위한 과정

이 문제는 구현 문제로 문제의 과정을 코드로 작성하면 쉽게 해결할 수 있었습니다. 다만 예제 6번의 경우, R C가 각각 3 3 이므로 정렬을 한번 하면 3, 3이 존재하지 않으므로 이 경우는 그냥 pass 하면 해결할 수 있습니다.

1 3
1 3
1 3

소스코드
R, C, K = map(int, input().split())

graph = []
for _ in range(3):
  graph.append(list(map(int, input().split())))

ans = 0

def graphSort(graph):
  for i in range(len(graph)):
    numArr = [0] * 101
    temp = []
    maxNum = 0
    for j in range(len(graph[i])):
      numArr[graph[i][j]] += 1
    for k in range(1, 101):
      if numArr[k] != 0:
        temp.append((k, numArr[k]))
        maxNum += 2
    temp.sort(key = lambda x: (x[1], x[0]))
    if maxNum >= 100:
      maxNum = 100
    tempArr = []
    for k in range(0, maxNum, 2):
      tempArr.append(temp[k//2][0])
      tempArr.append(temp[k//2][1])
    graph[i] = tempArr
  maxCol = 0
  for i in range(len(graph)):
    maxCol = max(maxCol, len(graph[i]))
  for i in range(len(graph)):
    tempNum = maxCol - len(graph[i])
    for j in range(tempNum):
      graph[i].append(0)
      
while True:
  if ans > 100:
    ans = -1 
    break
  if len(graph) >= R and len(graph[0]) >= C:
    if graph[R-1][C-1] == K:
      break
  ans += 1
  rowCnt = len(graph)
  colCnt = len(graph[0])
  if rowCnt >= colCnt: # R연산
    graphSort(graph)
  else: # C 연산
    a = len(graph) # 행 정보
    b = len(graph[0]) # 열 정보
    tempGraph = [[0] * a for _ in range(b)]
    for i in range(b):
      for j in range(a):
        tempGraph[i][j] = graph[j][i]      
    graphSort(tempGraph)
    a = len(tempGraph)
    b = len(tempGraph[0])
    orgGraph = [[0] * a for _ in range(b)] 
    for i in range(b):
      for j in range(a):
        orgGraph[i][j] = tempGraph[j][i]      
    graph = orgGraph

print(ans)

+ Recent posts