https://www.acmicpc.net/problem/2660
내 풀이:
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
|
def check(i, j):
queue = [i]
checking = []
cnt = 0
table = [1]
while queue:
a = queue.pop(0)
if field[a][j] == 1:
break
else:
checking.append(a)
for num, i in enumerate(field[a]):
if i == 1 and num not in checking:
queue.append(num)
table.append(table[cnt]+1)
cnt += 1
return table[cnt]
N = int(input())
field = [[0] * (N+1) for _ in range(N+1)]
result = [[0] * (N+1) for _ in range(N+1)]
while True:
a, b = map(int,input().split())
if a == -1:
break
field[a][b] = 1
field[b][a] = 1
score = [0] * (N+1)
score[0] = 100
for i in range(1, N+1):
for j in range(1, N+1):
if i == j or result [i][j] != 0:
pass
else:
value = check(i, j)
result[i][j] = value
result[j][i] = value
for i in range(1, N+1):
score[i] = max(result[i])
cut = min(score)
lst = []
for idx, i in enumerate(score):
if i == cut:
lst.append(idx)
print(cut, len(lst))
print(" ".join([str(i) for i in lst]))
|
Python3, 128ms
BFS를 이용하여 문제를 해결하였다. BFS를 거의 처음 사용하다 보니 지금 검토하는 자료가 어느 깊이의 자료인지 정해주는 방법을 모르겠어서 이를 체크해주는 체크 리스트를 따로 만들어야만 했다. 다른 사람들도 깊이를 표현하기 위해 리스트를 새로 만드는지 아니면 다른 방법이 있는지 잘 모르겠다.
newprog님의 풀이:
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
|
import sys
n = int(input())
a = [[0 for _ in range(n+1)] for _ in range(n+1)]
while True:
t = list(map(int, sys.stdin.readline().split()))
if t[0] == -1:
break
a[t[0]][t[1]] = 1
a[t[1]][t[0]] = 1
def find(idx):
s = {idx}
q = [(idx, 0)]
m = 0
while len(q) != 0:
p, d = q.pop(0)
m = d
for i, e in enumerate(a[p]):
if e == 1 and i not in s:
q.append((i, d+1))
s.add(i)
return m
score_dic = dict()
for i in range(1,n+1):
score_dic[i] = find(i)
sort = sorted(score_dic.items(), key=lambda x: x[1])
count = n
can = ""
for i, e in enumerate(sort):
if e[1] != sort[0][1]:
count = i
break
else:
can += str(e[0]) + " "
print(sort[0][1], count)
print(can.strip())
|
Python3, 56ms
앞서 언급한 깊이가 stack이라는 개념인 것 같다. 이에 관한 공부는 다음에 이어나갈 계획이다.
파이썬으로 풀어보는 백준 2580번: 스도쿠 (0) | 2020.02.25 |
---|---|
파이썬으로 풀어보는 백준 2651번: 자동차경주대회 (0) | 2020.02.03 |
파이썬으로 풀어보는 백준 7569번: 토마토 (0) | 2020.01.30 |
파이썬으로 풀어보는 백준 2156번: 포도주 시식 (0) | 2020.01.28 |
파이썬으로 풀어보는 백준 2579번: 계단 오르기 (0) | 2020.01.22 |
댓글 영역