doctscoder
하고싶은일있는개발
doctscoder
전체 방문자
오늘
어제
  • 분류 전체보기 (305)
    • 코테용 문제풀이 (304)
      • 백준 (272)
      • 알고스팟 (32)
    • 공부계획 (1)

최근 글

hELLO · Designed By 정상우.
doctscoder

하고싶은일있는개발

코테용 문제풀이/백준

다리 만들기 풀이

2023. 2. 8. 16:03

문제 링크: https://www.acmicpc.net/problem/2146

백준 알고리즘 기초 2/2 602에서 3번째 - 2146번 다리 만들기를 풀어보았다.

 

풀이: https://velog.io/@thguss/%EB%B0%B1%EC%A4%80-2146.-%EB%8B%A4%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B8%B0-with.-Python 를 참고했다.

 

C++

 

Python

from collections import deque

def island(a,b):
	q=deque()
	q.append([a,b])
	while q:
		x,y=q.popleft()
		for (h,w) in [[1,0],[0,1],[-1,0],[0,-1]]:
			dx,dy=x+h,y+w
			if 0<=dx<n and 0<=dy<n and not visited[dx][dy] and inp[dx][dy]:
				visited[dx][dy]=1
				inp[dx][dy]=num
				q.append([dx,dy])

def bfs(v):
	q=deque()
	dis=[[-1]*n for i in range(n)]
	for i in range(n):
		for j in range(n):
			if inp[i][j]==v:
				dis[i][j]=0
				q.append([i,j])
	while q:
		x,y=q.popleft()
		for (w,h) in [[1,0],[0,1],[-1,0],[0,-1]]:
			dx,dy=x+w,y+h
			if 0<=dx<n and 0<=dy<n:
				if inp[dx][dy] and inp[dx][dy]!=v:
					return dis[x][y]
				elif (not inp[dx][dy]) and dis[dx][dy]==-1:
					dis[dx][dy]=dis[x][y]+1
					q.append([dx,dy])
	return int(1e9)

n=int(input())
inp=[list(map(int,input().split())) for i in range(n)]
visited=[[0]*n for i in range(n)]
num=1
res=int(1e9)
for i in range(n):
	for j in range(n):
		if inp[i][j] and not visited[i][j]:
			visited[i][j]=1
			inp[i][j]=num
			island(i,j)
			num+=1
for i in range(1,num):
	res=min(res,bfs(i))
print(res)

Java

 

저작자표시 비영리 변경금지 (새창열림)

'코테용 문제풀이 > 백준' 카테고리의 다른 글

숨바꼭질 4 풀이  (0) 2023.02.08
숨바꼭질 풀이  (0) 2023.02.08
DFS 스페셜 저지 풀이  (0) 2023.02.08
BFS 스페셜 저지 풀이  (0) 2023.02.07
서울 지하철 2호선 풀이  (0) 2023.02.07
    '코테용 문제풀이/백준' 카테고리의 다른 글
    • 숨바꼭질 4 풀이
    • 숨바꼭질 풀이
    • DFS 스페셜 저지 풀이
    • BFS 스페셜 저지 풀이
    doctscoder
    doctscoder
    코딩 관련 공부를 적어놓는 블로그

    티스토리툴바