일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- SSR
- Jest
- 인터섹션
- TS
- 이분 검색
- CI/CD
- Cypress
- 무한 스크롤
- 투포인터
- 태그된 유니온
- useAppDispatch
- 타입 좁히기
- 호이스팅
- 반공변성
- map
- app router
- RTK Query
- ESlint
- dfs
- 공변성
- autosize
- Promise
- 리터럴 타입
- tailwind
- React
- 결정 알고리즘
- CORS
- webpack
- async/await
- recoil
Archives
- Today
- Total
짧은코딩
16953 A->B 본문
반응형
https://www.acmicpc.net/problem/16953
내가 풀었던 풀이(47%까지 맞았었는데 2줄 바꾸고 정답 맞춤)
a, b = map(int, input().split())
count = 0
while(b >= 1):
if(b%2 != 0):
b -= 1
b = b / 10
count += 1
if(b == a):
print(count + 1)
break
elif(b %2 == 0):
b = b / 2
count += 1
if(b == a):
print(count + 1)
break
else:
print(-1)
b가 b >= 1면 계속 수행한다.
b가 짝수가 아닌 경우: 처음엔 b = b//10으로 했지만 만약 b가 23인 경우엔 -1이 나와야하는데 그렇지 않다. 그래서 b -= 1, b = b / 10로 하니까 된다. 그래서 b==a가 되면 종료하고 출력한다.
b가 짝수인 경우: 계속 나누기 2를 한다.
deque를 이용한 풀이법
from collections import deque
a, b = map(int, input().split())
res = -1
que = deque([(a, 1)])#a가 2면, 덱에 2와 1이 있다.
while que:
i, cnt = que.popleft() #왼쪽 값을 빼고싶으면 popleft()
if i == b:
res = cnt
break
if i*2 <= b: #2로 곱하는 경우
que.append((i*2, cnt+1))
if int(str(i)+'1') <= b: #뒤에 1을 추가하는 경우
que.append((int(str(i)+'1'), cnt+1))
print(res)
-2 162를 입력했을때 나오는 첫 결과
if문을 2개다 만족해서 2가지를 다 한 경우가 모두 deque에 들어간다.
-그 다음 while문
deque에 들어갔던 값을 돌리면 3가지의 경우가 나오게된다.
그러다가 i가 162가 된다면 종료를 한다.
반응형
'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글
1049 기타줄 (0) | 2022.01.16 |
---|---|
1543 문서검색 (0) | 2022.01.16 |
1439 뒤집기 (0) | 2022.01.13 |
1541 잃어버린 괄호 (0) | 2022.01.12 |
4797 캠핑 (0) | 2022.01.11 |
Comments