from collections import deque
import sys
target = -999
def bfs(q):
while q :
now = q.popleft() #(0,1) 의 (x,y) 형태로 빠져나옴
#print(now)
for i in range(4) : #상하좌우 살펴봐야 함
tmpr = now[0]+rloc[i] # x가 column 열이고
tmpc = now[1]+cloc[i] # y가 row 행임 , 따라서 [tmpy][tmpx] 순서
if 0<=tmpr<r and \
0<=tmpc<c and \
chk[tmpr][tmpc]==0 and \
(map[tmpr][tmpc]=='L') :
q.append((tmpr , tmpc)) # r(행), c(열) 순으로 저장
chk[tmpr][tmpc] = 1
dis[tmpr][tmpc] = dis[now[0]][now[1]]+1
# 행,열 값 받기
r,c = map(int,sys.stdin.readline().rstrip().split())
# 지도 받기
map=[]
for i in range(r) :
map.append(list(sys.stdin.readline().rstrip()))
# 상하좌우
rloc = [0,0,-1,1]
cloc = [1,-1,0,0]
land =[]
for i in range(r) :
for j in range(c) :
if(map[i][j]=='L') :
land.append((i,j)) # y가 행, x가 열 따라서 j,i 순으로 넣어줌
for i in land :
start = i
# 초기화 작업
q=deque() #하나 popleft 되면 인접노드 담고,, 반복할 아이
chk = [[0] * (c+1) for _ in range(r+1)] #방문 여부 체크
dis = [[0] * (c+1) for _ in range(r+1)] #거리 정보 체크
# 초기화 작업 (2) - 시작점 아이 체크
q.append((start[0], start[1]))
chk[start[0]][start[1]]=1
dis[start[0]][start[1]]=0
#print(q)
bfs(q)
for i in dis :
#print("dis " , i)
if max(i) > target :
target = max(i)
print(target)
from collections import deque
from itertools import combinations
import sys
maxnum = -9999
def bfs(q):
global maxnum
while q :
now = q.popleft() #(0,1) 의 (x,y) 형태로 빠져나옴
if(maxnum < dis[now[0]][now[1]]) :
maxnum = dis[now[0]][now[1]]
for i in range(4) : #상하좌우 살펴봐야 함
tmpx = now[0]+x[i] # x가 column 열이고
tmpy = now[1]+y[i] #y가 row 행임 , 따라서 [tmpy][tmpx] 순서
if 0<=tmpx<c and \
0<=tmpy<r and \
chk[tmpy][tmpx]==0 and \
(map[tmpy][tmpx]=='L') :
q.append((tmpy, tmpx))
chk[tmpy][tmpx]== 1
dis[tmpy][tmpx] = dis[now[0]][now[1]]+1
map[tmpy][tmpx] = 'D' #done 표시
# 행,열 값 받기
r,c = map(int,sys.stdin.readline().rstrip().split())
# 지도 받기
map=[]
for i in range(r) :
map.append(list(sys.stdin.readline().rstrip()))
# L 들을 두개씩 묶은 조합을 제작
# bfs 로 두개의 최단 거리들을 구해서 리스트에 넣기
# L조합들의 최단거리 모음 중 가장 큰 아이 pick
# 상하좌우
x = [0,0,-1,1]
y = [1,-1,0,0]
land =[]
for i in range(r) :
for j in range(c) :
if(map[i][j]=='L') :
land.append((i,j))
land2 = []
# list(combinations(land,2)) : ((0, 1), (0, 2)), ((0, 1), (0, 6)), ((0, 1), (1, 0))
for i in list(combinations(land,2)) :
start = i[0]
# print(start) # (0, 1)
end = i[1]
# 초기화 작업
q=deque() #하나 popleft 되면 인접노드 담고,, 반복할 아이
chk = [[0] * (c+1) for _ in range(r+1)] #방문 여부 체크
dis = [[0] * (c+1) for _ in range(r+1)] #거리 정보 체크
# 초기화 작업 (2) - 시작점 아이 체크
q.append((start[0], start[1]))
chk[start[0]][start[1]]=1
dis[start[0]][start[1]]=1
newdis = bfs(q)
print(maxnum)
from collections import deque
from itertools import combinations
import sys
target = -999
def bfs(q, startx, starty, endr, endc):
global target
global mapp
while q :
now = q.popleft() #(0,1) 의 (x,y) 형태로 빠져나옴
if target < dis[now[0]][now[1]] :
print(startx, starty)
print(endr, endc)
print(now)
for i in dis :
print(i)
print('\n')
target = dis[now[0]][now[1]]
for i in range(4) : #상하좌우 살펴봐야 함
tmpr = now[0]+rloc[i] # x가 column 열이고
tmpc = now[1]+cloc[i] # y가 row 행임 , 따라서 [tmpy][tmpx] 순서
if 0<=tmpr<r and \
0<=tmpc<c and \
chk[tmpr][tmpc]==0 and \
(mapp[tmpr][tmpc]=='L') :
q.append((tmpr , tmpc)) # r(행), c(열) 순으로 저장
chk[tmpr][tmpc]== 1
dis[tmpr][tmpc] = dis[now[0]][now[1]]+1
mapp[tmpr][tmpc] = 'D' #done 표시
# 행,열 값 받기
r,c = map(int,sys.stdin.readline().rstrip().split())
# 지도 받기
map=[]
for i in range(r) :
map.append(list(sys.stdin.readline().rstrip()))
# L 들을 두개씩 묶은 조합을 제작
# bfs 로 두개의 최단 거리들을 구해서 리스트에 넣기
# L조합들의 최단거리 모음 중 가장 큰 아이 pick
# 상하좌우
rloc = [0,0,-1,1]
cloc = [1,-1,0,0]
land =[]
for i in range(r) :
for j in range(c) :
if(map[i][j]=='L') :
land.append((i,j)) # y가 행, x가 열 따라서 j,i 순으로 넣어줌
land2 = []
mapcpy = map.copy()
# list(combinations(land,2)) : ((0, 1), (0, 2)), ((0, 1), (0, 6)), ((0, 1), (1, 0))
for i in list(combinations(land,2)) :
start = i[0]
#print("start : ", start) # (0, 1)
end = i[1]
# 초기화 작업
q=deque() #하나 popleft 되면 인접노드 담고,, 반복할 아이
chk = [[0] * (c+1) for _ in range(r+1)] #방문 여부 체크
dis = [[0] * (c+1) for _ in range(r+1)] #거리 정보 체크
# 초기화 작업 (2) - 시작점 아이 체크
mapp = mapcpy # map 다시 원상복귀
q.append((start[0], start[1]))
chk[start[0]][start[1]]=1
dis[start[0]][start[1]]=1
newdis = bfs(q, start[0], start[1], end[0], end[1])
print(target)
그래도 조합 복습하고, 내가 행열에서 틀린 줄 알고 & 시간초과 나서 행열에 대해서 삽질을 했는데, 처음에 row col 이라 지정했으면 row col로 변수명 쭉 가고 , 그게 아니라면 한가지 변수명을 고정 ㄱㄱ
난 처음에 row col 이랑 x , y 같이 썼더니 헷갈려서 죽는 줄 ! 갠적으로 row col 개념이 더 편안함 (선대를 수강해서 그런가,,)!!