일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- itertools
- 코틀린
- 매일11시
- 11054
- 1260
- Combination
- 11057
- LCS
- 홈화면
- 안드로이드
- 나머지
- Android
- Kotlin
- 1182
- 괄호
- 11기
- 11053
- lcm
- 뒤로가기
- 최소공배수
- 코테
- 앱
- expo
- 순열
- permutation
- 6603
- Python
- 파이썬
- 9095
- 백준
Archives
- Today
- Total
황소개발자
백준 15558 파이썬 python : 점프 게임 @@황소처럼 우직하게@@ 이거이거 BFS 큐 두개로 푸는것이여! 본문
반응형
간단간단하다구
원래 기본 BFS는 큐 한개로 구현이 되지.
이거는 시간을 고려해줘야 하기 때문에, (매초마다 1칸씩 없어지는) 큐 두개로 시간과 동기화 시켜줘야 해 ^^
아래는 흔히 틀리는 반례야 (djm03178 님이 등록해주셨어)
23 5
10000000100010010000000
00011111001111111100100
n, k = map(int, input().split())
lst1 = input()
lst2 = input()
lst = [lst1, lst2]
visited = [[0 for i in range(n)] for _ in range(2)]
visited[0][0] = 1
def bfs():
q = []
q2 = []
q2.append([0, 0])
remove = 0
while q2:
now_idx, lst_num = q2.pop(0)
# print("now_idx %d, lst_num %d" % (now_idx, lst_num))
if now_idx + 1 >= n or now_idx + k >= n:
return 1
if lst[lst_num][now_idx + 1] == '1' and visited[lst_num][now_idx + 1] == 0:
visited[lst_num][now_idx + 1] = 1
q.append([now_idx + 1, lst_num])
if now_idx - 1 > remove and lst[lst_num][now_idx - 1] == '1' and visited[lst_num][now_idx - 1] == 0:
visited[lst_num][now_idx - 1] = 1
q.append([now_idx - 1, lst_num])
if lst[(lst_num + 1) % 2][now_idx + k] == '1' and visited[(lst_num + 1) % 2][now_idx + k] == 0:
visited[(lst_num + 1) % 2][now_idx + k] = 1
q.append([now_idx + k, (lst_num + 1) % 2])
if not q2:
q2 = q
q = []
remove += 1
return 0
print(1 if bfs() else 0)
반응형
'백준 문제 풀이' 카테고리의 다른 글
백준 14391 파이썬 python : 종이 조각 @@황소처럼 우직하게@@ 비트연산을 모른다면 넌 아직이다.. (0) | 2020.04.20 |
---|---|
백준 6087 파이썬 python : 레이저통신 @@황소처럼 우직하게@@ 백준님은 대단하신분이다.. (0) | 2020.04.18 |
백준 12851 파이썬 python : 숨바꼭질 2 @@황소처럼 우직하게@@ 어여와 반례들 있응께 (0) | 2020.03.27 |
백준 10422 파이썬 python : 괄호 @@황소처럼 우직하게@@ dp로 푸는 방법!! (0) | 2020.03.26 |
백준 5557 파이썬 python : 1학년 @@황소처럼 우직하게@@ 난 지금 4학년.. (0) | 2020.03.26 |
Comments