-
[백준] 17140 - 이차원 배열과 연산Algorithm 문제 2019. 6. 29. 17:23
https://www.acmicpc.net/problem/17140
17140번: 이차원 배열과 연산
첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다.
www.acmicpc.net
단순한 연산 구현 문제. 상대적으로 속도가 느린 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