-
[백준] 17140 - 이차원 배열과 연산Algorithm 문제 2019. 6. 29. 17:23
https://www.acmicpc.net/problem/17140
단순한 연산 구현 문제. 상대적으로 속도가 느린 Python을 사용하였다.
시간제한을 맞추기 위해 몇가지 방법을 사용하였다.
- PyPy3로 제출
- heapq, sys 모듈 사용
<Python 코드>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263import sysimport collectionsimport heapqlines = sys.stdin.readlines()r, c, k = tuple(map(int, lines[0].split()))init = [list(map(int, line.split())) for line in lines[1:]]mat = [[0 for _ in range(100)] for _ in range(100)]for i in range(3):for j in range(3):mat[i][j] = init[i][j]re = Falsew, h = 3, 3for i in range(100):if mat[r-1][c-1] == k:print(i)re = Truebreakif h >= w:bw = wfor i in range(h):count = collections.Counter(mat[i])l = []n = len(count)for key in count.keys():if key != 0:heapq.heappush(l, (count[key], key))else:n -= 1cw = min(n * 2, 100)w = max(w, cw)for j in range(cw//2):t = heapq.heappop(l)mat[i][j*2] = t[1]mat[i][j*2+1] = t[0]for j in range(cw, bw, 1):mat[i][j] = 0else:bh = hfor i in range(w):count = collections.Counter([col[i] for col in mat])l = []n = len(count)for key in count.keys():if key != 0:heapq.heappush(l, (count[key], key))else:n -= 1ch = min(n * 2, 100)h = max(h, ch)for j in range(ch//2):t = heapq.heappop(l)mat[j*2][i] = t[1]mat[j*2+1][i] = t[0]for j in range(ch, bh, 1):mat[j][i] = 0if not re:if mat[r-1][c-1] == k:print(100)else:print(-1)cs <Pypy3 vs Python>
서버 상태 등, 다른 요인이 있기는 하지만 PyPy 가 반드시 빠른 것은 아닌 듯하다.
다른 분들의 제출 목록에서도 전반적으로 python코드들이 실행시간이 짧았다.
'Algorithm 문제' 카테고리의 다른 글
[백준] 1562 - 계단 수 (0) 2019.06.30 [백준] 3190 - 뱀 (0) 2019.06.30 [백준] 1238 - 파티 (0) 2019.06.28 [백준] 13306 - 트리 (0) 2019.06.27 [백준] 2805 - 나무 자르기 (0) 2019.06.26