728x90
반응형
https://www.acmicpc.net/problem/17140
문제 해결
- R연산 C연산 모두 같은 방식이다. 그래서 함수를 하나만 만들고자 한다. cal_R
- C연산을 사용해야할 때 (열의 개수가 행의 개수보다 많을 때)는 transform을 통해 행과 열을 바꾼다음 cal_R을 한 다음 다시 transform을 한다.
- 연산 방식은 행마다 원소와 원소의 개수를 묶은 다음 원소의 개수가 작은 것, 원소의 크기 순으로 오름차순으로 나열 한다. (단 0은 제외)
- 원소, 원소의 개수를 차례대로 리스트 안에 넣은 다음 추가적으로 필요한 만큼 0을 넣어준다.
CODE
def calR():
global A
new_graph = []
for i in A:
elem = set(i)
tem = []
tem2 = []
for j in elem:
if j == 0:continue
cnt = i.count(j)
tem.append((j, cnt))
tem.sort(key=lambda x: (x[1], x[0]))
for k in tem:
tem2.append(k[0])
tem2.append(k[1])
tem2 = tem2[:100]
new_graph.append(tem2)
max_len = max(map(len, new_graph))
for i in range(len(new_graph)):
while len(new_graph[i]) != max_len:
new_graph[i].append(0)
A = new_graph
if __name__ == "__main__":
r, c, k = map(int, input().split())
A = [list(map(int, input().split())) for _ in range(3)]
for i in range(101):
try:
if A[r - 1][c - 1] == k:
print(i)
break
except:
pass
if len(A[0]) > len(A): # 열의 개수가 더 클 때
A = list(map(list, zip(*A))) # transform
calR()
A = list(map(list, zip(*A)))
else: # 행의 개수가 열의 개수 이상일 때
calR()
else:
print(-1)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 11758 CCW (0) | 2023.06.14 |
---|---|
[python] 백준 17822 원판 돌리기 (0) | 2023.06.07 |
[python] 백준 16236 아기 상어 (0) | 2023.05.29 |
[python] 백준 3954 Brainf**k 인터프리터 (0) | 2023.05.28 |
[python] 백준 14891 톱니바퀴 (0) | 2023.05.22 |
댓글