일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 안드로이드
- Python
- 9095
- 1260
- 코테
- 최소공배수
- 백준
- permutation
- 파이썬
- 매일11시
- 홈화면
- 순열
- 괄호
- lcm
- itertools
- 나머지
- 11057
- 코틀린
- Combination
- Kotlin
- 1182
- 앱
- 뒤로가기
- 11053
- 11기
- expo
- LCS
- 11054
- 6603
- Android
Archives
- Today
- Total
황소개발자
백준 12851 파이썬 python : 숨바꼭질 2 @@황소처럼 우직하게@@ 어여와 반례들 있응께 본문
반응형
5 1000
입력했을 때,
11
2
가 나오는가?
안나온다면 중복을 해결하지 못한것이여.
그리고
n == k 일 때,
0
1
이 나와야혀.
코드는 다음과 같네
dp2 로 중복 개수를 헤아렷네.
n, k = map(int, input().split())
if n == k:
print(0)
print(1)
exit()
dp = [-1] * 150001
dp2 = [1] * 150001
flag = False
dist = -1
count = 0
dp[n] = 0
q = [n]
q2 = []
while q:
now = q.pop(0)
if now + 1 <= 150000:
if dp[now + 1] == dp[now] + 1:
dp2[now + 1] += dp2[now]
elif dp[now + 1] == -1:
if now + 1 == k:
flag = True
count += dp2[now]
else:
dp[now + 1] = dp[now] + 1
dp2[now + 1] = dp2[now]
q2.append(now + 1)
if now - 1 >= 0:
if dp[now - 1] == dp[now] + 1:
dp2[now - 1] += dp2[now]
elif dp[now - 1] == -1:
if now - 1 == k:
flag = True
count += dp2[now]
else:
dp[now - 1] = dp[now] + 1
dp2[now - 1] = dp2[now]
q2.append(now - 1)
if now * 2 <= 150000:
if dp[now * 2] == dp[now] + 1:
dp2[now * 2] += dp2[now]
elif dp[now * 2] == -1:
if now * 2 == k:
flag = True
count += dp2[now]
else:
dp[now * 2] = dp[now] + 1
dp2[now * 2] = dp2[now]
q2.append(now * 2)
if not q and not flag:
q = q2
q2 = []
print(dp[now] + 1)
print(count)
반응형
'백준 문제 풀이' 카테고리의 다른 글
백준 6087 파이썬 python : 레이저통신 @@황소처럼 우직하게@@ 백준님은 대단하신분이다.. (0) | 2020.04.18 |
---|---|
백준 15558 파이썬 python : 점프 게임 @@황소처럼 우직하게@@ 이거이거 BFS 큐 두개로 푸는것이여! (0) | 2020.04.18 |
백준 10422 파이썬 python : 괄호 @@황소처럼 우직하게@@ dp로 푸는 방법!! (0) | 2020.03.26 |
백준 5557 파이썬 python : 1학년 @@황소처럼 우직하게@@ 난 지금 4학년.. (0) | 2020.03.26 |
백준 1495 파이썬 python : 기타리스트 @@황소처럼 우직하게@@ 기타로 맞아볼래? (0) | 2020.03.26 |
Comments