https://www.acmicpc.net/problem/17140
문제 해결을 위한 과정
이 문제는 구현 문제로 문제의 과정을 코드로 작성하면 쉽게 해결할 수 있었습니다. 다만 예제 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)
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘 11048: 이동하기(Python) (0) | 2024.04.16 |
---|---|
백준 알고리즘 10844: 쉬운 계단 수(Python) (0) | 2024.04.16 |
백준 알고리즘 15683: 감시(Python) (0) | 2024.04.09 |
백준 20055번: 컨베이어 벨트 위의 로봇(Python) (0) | 2024.04.08 |
백준 9663번: N-Queen(Python) (0) | 2024.04.06 |