일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다중 컬럼 NOT IN
- 프로그래머스 순위
- 등굣길 파이썬
- 백준 2352 반도체 설계 파이썬
- 프로그래머스 가장 긴 팰린드롬
- SQL SERVER MIGRATION
- 순위 파이썬
- 베스트앨범 파이썬
- 프로그래머스 베스트앨범
- 프로그래머스 순위 파이썬
- 반도체 설계 파이썬
- 가장 긴 바이토닉 부분 수열 파이썬
- 프로그래머스 여행경로
- 가장 긴 팰린드롬 파이썬
- 역사 파이썬
- SWEA
- 백준 1238 파티 파이썬
- 백준 1613 역사
- 백준 1516 게임 개발
- 백준 11054.가장 긴 바이토닉 부분 수열
- 다리 만들기 파이썬
- 게임 개발 파이썬
- 프로그래머스 등굣길
- 백준 1034 램프 파이썬
- SQL SERVER 장비교체
- 백준 1043 거짓말 파이썬
- 램프 파이썬
- 트리의 지름 파이썬
- 백준 1167 트리의 지름 파이썬
- 백준 2146 다리 만들기
Archives
- Today
- Total
공부, 기록
백준 2146. 다리 만들기 파이썬(PYTHON) 본문
문제링크 : www.acmicpc.net/problem/2146
2146번: 다리 만들기
여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다
www.acmicpc.net
def solution(MAPS, N):
visitied = [[0 for _ in range(N)]for i in range(N)]
landnum=2
answer = list()
mins = 9999
dx=[1,-1,0,0]; dy =[0,0,1,-1]
#섬 구분
for i in range(N):
for j in range(N):
if MAPS[i][j] == 1:
MAPS[i][j] = landnum
stack = list()
if visitied[i][j] != 1:
visitied[i][j]=1
stack.append((i,j))
while stack:
x, y = stack.pop(0)
for k in range(4):
mx = x+dx[k]; my = y+dy[k]
if 0<=mx<N and 0<=my<N:
if MAPS[mx][my]==1:
if visitied[mx][my]==0:
MAPS[mx][my]=landnum
visitied[mx][my]=1
stack.append((mx,my))
landnum+=1
#다리 찾기
for i in range(N):
for j in range(N):
if MAPS[i][j] != 0:
nowland = MAPS[i][j]
visitied = [[0 for _ in range(N)]for i in range(N)]
stack = list()
if visitied[i][j] != 1:
visitied[i][j]=1
stack.append((i,j,0))
while stack:
x, y, count = stack.pop(0)
if count > mins:
continue
for k in range(4):
mx = x+dx[k]; my = y+dy[k]
if 0<=mx<N and 0<=my<N:
if MAPS[mx][my]!=nowland:
if MAPS[mx][my] == 0:
if visitied[mx][my]==0:
visitied[mx][my]=1
stack.append((mx,my,count+1))
elif MAPS[mx][my] != 0:
if mins >count:
mins = count
answer.append(count)
break
return min(answer)
def main():
N = int(input())
MAPS = list()
for _ in range(N):
line = list(map(int,input().split()))
MAPS.append(line)
print(solution(MAPS,N))
main()
'코딩' 카테고리의 다른 글
백준 11054. 가장 긴 바이토닉 부분 수열 파이썬(PYTHON) (0) | 2020.11.14 |
---|---|
백준 2352. 반도체 설계 파이썬(PYTHON) (0) | 2020.11.14 |
백준 1613. 역사 파이썬(PYTHON) (0) | 2020.11.14 |
백준 1516. 게임 개발 파이썬(PYTHON) (0) | 2020.11.14 |
백준 1238 파티 파이썬(PYTHON) (0) | 2020.11.14 |