Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions graph_traversal/백준_11403_경로찾기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#간선추가할 때, 양쪽에서 이어지는 것인 줄 알았는데
#하나만 추가하면 됐었다.
from collections import deque
n = int(input())
num=[[] for _ in range(n)]

for i in range(n):
x=list(map(int,input().split()))
for j in range(n):
if x[j]==1:
num[i].append(j)

def bfs(a):
visit=[0]*n
q=deque()
q.append(a)
while q:
x=q.popleft()
for nx in num[x]:
if visit[nx]==0:
visit[nx]=1
q.append(nx)
return visit

for i in range(n):
result=bfs(i)
for j in range(n):
print(result[j],end=' ')
print()

#메모리 : 34140 kb
#시간 : 80 ms
#코드길이 : 597 b
#풀이시간 : 30분(대충)
34 changes: 34 additions & 0 deletions graph_traversal/백준_12851_숨바꼭질2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# 다시풀기
from collections import deque
n,k=map(int,input().split())
gragh=[0]*100001
visit=[0]*100001

cnt=0
res=0
q=deque()

def bfs(a):
global res,cnt
q.append(a)
while q:
x=q.popleft()
temp=gragh[x]
if x==k:
cnt+=1
res=temp
continue
for nx in [x-1,x+1,2*x]:
if 0<=nx<100001 and (gragh[nx]==0 or gragh[nx]==gragh[x]+1):
gragh[nx]=gragh[x]+1
q.append(nx)
return res,cnt

x,y=bfs(n)
print(x)
print(y)

#메모리 : 38468 kb
#시간 : 380 ms
#코드길이 : 547 b
#풀이시간 : 53분
27 changes: 27 additions & 0 deletions graph_traversal/백준_13549_숨바꼭질3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# gragh초기화 값을 0에서 -1로만 바꾸어주니까 바로 성공했다.. 왜지?
from collections import deque
n,k = map(int,input().split())
gragh=[-1]*100001
gragh[n]=0
q=deque()
q.append(n)
cnt=0

while q:
x=q.popleft()
if x==k:
print(gragh[x])
break
for nx in [x-1,x+1,x*2]:
if 0<=nx<100001 and gragh[nx]==-1:
if nx==x*2:
gragh[nx]=gragh[x]
q.appendleft(nx)
else:
gragh[nx]=gragh[x]+1
q.append(nx)

#메모리 : 35364 kb
#시간 : 132 ms
#코드길이 : 444 b
#풀이시간 : 34분
41 changes: 41 additions & 0 deletions graph_traversal/백준_16928_뱀과사다리게임.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from collections import deque
n,m = map(int,input().split())
sa={}
snake={}
for i in range(n):
x,y = map(int,input().split())
sa[x]=y
for i in range(m):
u,v=map(int,input().split())
snake[u]=v

gragh=[0]*101

visit=[0]*101

def bfs(a):
q=deque()
q.append(a)
while q:
x=q.popleft()
if x==100:
return gragh[100]
for i in range(1,7):
nx=x+i
if 0<nx<=100 and visit[nx]==0:
if nx in sa:
nx=sa[nx]
elif nx in snake:
nx=snake[nx]
if visit[nx]==0:
visit[nx]=1
gragh[nx]=gragh[x]+1
q.append(nx)

x=bfs(1)
print(x)

#메모리 : 34176 kb
#시간 : 64 ms
#코드길이 : 760 b
#풀이시간 : 약 1시간
42 changes: 42 additions & 0 deletions graph_traversal/백준_1743_음식물피하기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from collections import deque
n,m,k = map(int,input().split())
gragh=[[0]*m for _ in range(n)]
for i in range(k):
r,c = map(int,input().split())
gragh[r-1][c-1]=1

result=0
dx=[0,0,1,-1]
dy=[-1,1,0,0]
visit=[[0]*m for _ in range(n)]

def bfs(a,b):
global cnt
q=deque()
q.append((a,b))

while q:
x,y=q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<n and 0<=ny<m and gragh[nx][ny]==1 and visit[nx][ny]==0:
cnt+=1
visit[nx][ny]=1
q.append((nx,ny))
# return cnt

for i in range(n):
for j in range(m):
if visit[i][j]==0 and gragh[i][j]==1:
cnt=0
bfs(i,j)
# print(ans)
result=max(result,cnt)
# print(gragh)
print(result)

#메모리 : 34176 kb
#시간 : 272 ms
#코드길이 : 820 b
#풀이시간 : 33분
35 changes: 35 additions & 0 deletions graph_traversal/백준_1987_알파벳.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 시간초과,, set으로 풀어야 하는 것 같다..
from collections import deque
r,c = map(int,input().split())
gragh=[]
# al=[]
for i in range(r):
gragh.append(list(input()))

dx=[0,0,1,-1]
dy=[-1,1,0,0]

# visit=[[0]*c for _ in range(r)]
cnt=1

q=deque()
q.append((0,0,gragh[0][0]))
# visit[0][0]=1
# al.append(gragh[0][0])
while q:
x,y,al = q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<r and 0<=ny<c and gragh[nx][ny] not in al:
# al.append(gragh[nx][ny])
# visit[nx][ny]=1
q.append((nx,ny,al+gragh[nx][ny]))
cnt=max(cnt,len(al)+1)
# print(al)
print(cnt)

#메모리 : kb
#시간 : ms
#코드길이 : 607 b
#풀이시간 : 약 1시간
10 changes: 10 additions & 0 deletions graph_traversal/백준_2668_숫자고르기.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# 1->3,3->1, 5->5 이런식으로 사이클이 생겨야 하는 건 알겠다.
# 이걸 어떻게 구현해야 하는지는 모르겠다.

n = int(input())
num={}
for i in range(1,n+1):
num[i]=int(input())

# dfs로 풀기
# 정점들을 돌면서 연결이 되는지 파악,,
33 changes: 33 additions & 0 deletions graph_traversal/백준_3055_탈출.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# 다시 풀기..(이해는 되지만 구현을 못하겠다)
from collections import deque

r,c = map(int,input().split())
gragh=[]
for i in range(r):
gragh.append(list(input()))

dx=[0,0,-1,1]
dy=[1,-1,0,0]

visit=[[0]*c for _ in range(r)]

q=deque()

def bfs(a,b):
q.append((a,b))
while q:
x,y=q.popleft()

for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<r and 0<=ny<c:
if (gragh[nx][ny]=="." or gragh[nx][ny]=="D") and gragh[x][y]=="S":
gragh[nx][ny]="S"
visit[nx][ny]=visit[x][y]+1
q.append((nx,ny))
elif (gragh[nx][ny]=="." or gragh[nx][ny]=="S") and gragh[x][y]=="*":
gragh[nx][ny]="*"
q.append((nx,ny))
return "KAKTUS"