17140 - 이차원 배열과 연산
2022. 7. 7. 14:54ㆍ2022/BaekJoon_삼성 SW 역량 테스트 기출
처음에 텍스트 만으로는 이해하기 어려워서 아래 그림과 같이 그려가며 이해해보았다.
# R연산 : 배열 A의 모든 행에 대해서 정렬을 수행 -> 행의 개수 >= 열의 개수
# C연산 : 배열 A의 모든 열에 대해서 정렬을 수행 -> 행의 개수 < 열의 개수
def rowSort(graph):
copyGraph = []
maxRowLen = 0
for rowGraph in graph:
srGraph = set(rowGraph)
lrGraph = list(srGraph)
lrGraph.sort(reverse=True)
tmp = []
for i in range(len(lrGraph)):
if lrGraph[i] == 0:
continue
tmp.append([lrGraph[i], rowGraph.count(lrGraph[i])])
# 수의 등장 횟수가 커지는 순서로 -> 동일 횟수가 여러가지면 수가 커지는 순서로 정렬
tmp.sort(key=lambda x : (x[1], x[0]))
tmp2 = []
for i in tmp:
tmp2.append(i[0])
tmp2.append(i[1])
copyGraph.append(tmp2)
maxRowLen = max(maxRowLen, len(tmp2))
# 100이 넘으면 처음 100개의 수를 제외한 나머지는 버리기
if maxRowLen > 100:
maxRowlen = 100
for j in range(len(copyGraph)):
if len(copyGraph[j]) < maxRowLen:
copyGraph[j]+=[0]*(maxRowLen-len(copyGraph[j]))
return copyGraph
def colSort(graph):
colGraph = []
for idx in range(len(graph[0])):
tmp = []
for i in range(len(graph)):
tmp.append(graph[i][idx])
colGraph.append(tmp)
colGraph = rowSort(colGraph)
# 행 - 열 전환
transGraph = [[0]*len(colGraph) for _ in range(len(colGraph[0]))]
for row in range(len(colGraph)):
for col in range(len(colGraph[0])):
transGraph[col][row] = colGraph[row][col]
return transGraph
# 한 행 또는 열에 있는 수를 정렬하기 위해서, 각각의 수가 몇 번 나왔는지 확인 -> 등장 횟수가 커지는 순서 & 다수인 경우에는 수가 커지는 순서 정렬 -> 정렬 결과 삽입
R, C, K = map(int, input().split())
graph = []
for _ in range(3):
graph.append(list(map(int, list(input().split()))))
cnt = 0
while True:
if cnt > 100:
print(-1)
break
# 범위 조건 추가
if 0 <= R-1 < len(graph) and 0<=C-1<len(graph[0]) and graph[R-1][C-1] == K:
print(cnt)
break
elif len(graph) >= len(graph[0]):
graph = rowSort(graph)
else:
graph = colSort(graph)
cnt += 1
예제 6번의 경우에는 [[1, 1, 1], [1, 1, 1], [1, 1, 1]] -> [[1, 3], [1, 3], [1, 3]] -> [[1, 1, 3, 1], [1, 1, 3, 1], [1, 1, 3, 1]] 의 정렬 끝에 2라는 결과가 나온다.
그런데 처음에 이를 간과하고 바로 인덱싱을 했더니 2번째([[1, 3], [1, 3], [1, 3]]) 정렬에서 Out Of Index 에러가 났다.
그래서 범위에 대한 조건(65번 줄)을 추가한 뒤에 PASS를 할 수 있었다.
'2022 > BaekJoon_삼성 SW 역량 테스트 기출' 카테고리의 다른 글
16235 - 나무재테크 (0) | 2022.08.07 |
---|---|
14499 - 주사위 굴리기 (0) | 2022.07.26 |
17143 - 낚시왕 (0) | 2022.06.25 |
15685 - 드래곤 커브 (0) | 2022.06.10 |
16234 - 인구 이동 (0) | 2022.05.13 |