Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 파이썬
- 플로이드 와샬
- 트라이
- 투 포인터
- 브루트포스
- 2020 KAKAO BLIND RECRUITMENT
- 조합
- 프로그래머스
- 시뮬레이션
- 2021 KAKAO BLIND RECRUITMENT
- SWEA
- Spring
- 구현
- 다익스트라
- 백준
- 백트래킹
- 이분탐색
- 최소 신장 트리
- 2019 KAKAO BLIND RECRUITMENT
- 크루스칼
- 플로이드와샬
- 우선순위큐
- 스택
- GIT
- 2018 KAKAO BLIND RECRUITMENT
- BFS
- 투포인터
- 로봇 청소기
- 비트마스킹
- 2020 카카오 인턴십
Archives
- Today
- Total
개발조아
[BOJ/백준] 2479 경로 찾기 파이썬 본문
728x90
문제 링크 : https://www.acmicpc.net/problem/2479
BFS로 풀이 하였다.
그냥 모든 경우 다 따져도 될 것 같다.
BFS 돌면서 현재 점과 방문하지 않은 점들중 해밍 거리가 1인 것만 골라서 BFS를 진행해도 무방할 듯 하다.
30 * 1000 * 1000 = 30,000,000 이므로 다 따져도 충분하다.
그치만 나는 그냥 미리 해밍 거리가 1인걸 구하고 그 녀석들 가지고만 BFS를 수행했다.
그리고 가장 중요한것은 경로를 저장하는 것이다.
나는 visited 배열을 방문체크와 경로 저장에 사용 했다.
그래서 visited배열에는 해당 점으로 오기전 점의 번호를 저장한다.
예제 1번으로 따지면
[1, 4, 1, 3, 1] 이 된다.
이때 출발지가 1, 도착지가 2이므로 2부터 거꾸로 거슬러 가면 2 - 4 - 3 - 1이 된다.
이것을 역으로 출력하면 된다.
from sys import stdin
from collections import deque
input = stdin.readline
n,k = map(int, input().split())
bits = [input().strip() for _ in range(n)]
sn,en = map(lambda x:int(x)-1, input().split())
def solv():
visited = [-1]*n
candidate = set_candidate()
q = deque([(sn,0)])
visited[sn] = sn
while q:
now,cnt = q.pop()
if now == en:
print_answer(visited)
return
for nxt in candidate[now]:
if visited[nxt] == -1:
visited[nxt] = now
q.appendleft((nxt,cnt))
print(-1)
def print_answer(visited):
path = [en+1]
nxt = visited[en]
while visited[nxt] != nxt:
path.append(nxt+1)
nxt = visited[nxt]
path.append(sn+1)
path.reverse()
print(*path)
def set_candidate():
candidate = [[] for _ in range(n)]
for i in range(n-1):
for j in range(i+1,n):
flag = False
for a,b in zip(bits[i],bits[j]):
if a != b:
if flag:
break
flag = True
else:
candidate[i].append(j)
candidate[j].append(i)
return candidate
solv()
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 23034 조별과제 멈춰! 파이썬 (0) | 2021.12.05 |
---|---|
[BOJ/백준] 17472 다리 만들기 2 파이썬 (0) | 2021.12.03 |
[BOJ/백준] 1944 복제 로봇 (0) | 2021.12.03 |
[BOJ/백준] 5670 휴대폰 자판 파이썬 (0) | 2021.11.06 |
[BOJ/백준] 1647 도시 분할 계획 파이썬 (0) | 2021.11.02 |
Comments