https://www.acmicpc.net/problem/17140
내 풀이:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
def counting(lst):
table = [0] * 101
for i in lst:
table[i] += 1
table[0] = 0
table2 = table[:]
table2.sort()
result = []
for i in table2:
if i == 0:
pass
else:
result.append((table.index(i), i))
table[table.index(i)] = 0
return result
def go():
global max_col
for rows in arr:
next_row = []
count_table = counting(rows)
for num, cnt in count_table:
if num == 0:
continue
next_row.append(num)
next_row.append(cnt)
max_col = max(max_col, len(next_row))
next_arr.append(next_row)
for rows in next_arr:
if len(rows) < max_col:
for _ in range(max_col - len(rows)):
rows.append(0)
r, c, k = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(3)]
time = 0
while time <= 100:
if r <= len(arr) and c <= len(arr[0]) and arr[r-1][c-1] == k:
print(time)
break
time += 1
max_col = 0
next_arr = []
if len(arr) >= len(arr[0]):
go()
arr = next_arr
elif len(arr) < len(arr[0]):
arr = list(map(list, zip(*arr)))
go()
arr = next_arr
arr = list(map(list, zip(*arr)))
if time == 101:
print(-1)
|
Python3, 96ms
이번 문제는 정답률이나 난이도에 비해 나를 많이 힘들게 한 문제이다. 배열을 어떻게 처리해주어야 하는가에 대한 아이디어를 떠올리기가 너무 힘들었기 때문이다. R 연산의 경우는 처리가 어렵지 않았지만 C 연산의 경우 배열의 세로 방향으로 처리를 해줘야 한다는 것이 머릿 속으로 코딩 방향을 잡기가 쉽지 않았다. 결과적으로는 2차원 배열의 행과 열을 바꿔주는 방법으로 결정하였다. 이 행위를 위해서 쓸 수 있는 방법은 검색을 통해 알아냈는데 파이썬의 경우 map()과 zip(), 언패킹을 이용하면 쉽게 할 수 있다는 것이다. arr = list(map(list, zip(*arr))), 2차원 배열 arr에서 zip 함수을 이용하여 같은 자리에 있는 성분들을 가져와 묶어주고 이를 다시 list로 만든 다음 list에 저장하여 2차원 배열을 다시 구성하는 방식이다. 또한 나는 counting 함수를 정의하여 문제의 조건을 만족시켰는데 이 또한 Counter를 import하여 쉽게 해결하는 방법이 있었다. 모듈을 사용하지 않고 문제를 해결하자는 주의였으나 A 시험에서 sys 이외의 모듈은 호출하여 사용 가능한 것을 생각하면 정말 유용한 모듈의 경우에는 기억해 두었다가 공부하면 좋을 것 같다.
파이썬으로 풀어보는 백준 17779번: 게리맨더링 2 (삼성 A형 기출 문제) (0) | 2020.02.07 |
---|---|
파이썬으로 풀어보는 백준 17143번: 낚시왕 (삼성 A형 기출 문제) (0) | 2020.02.07 |
파이썬으로 풀어보는 백준 17822번: 원판 돌리기 (삼성 A형 기출 문제) (0) | 2020.02.07 |
파이썬으로 풀어보는 백준 16236번: 아기 상어 (삼성 A형 기출 문제) (0) | 2020.02.07 |
파이썬으로 풀어보는 백준 17136번: 색종이 붙이기 (삼성 A형 기출 문제) (0) | 2020.01.27 |
댓글 영역