일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- linux
- 그리디
- LangChain
- 우선순위큐
- 딥러닝
- 레디스
- t-test
- Python
- FastAPI
- 분산시스템
- 백준
- 파이썬
- 보안
- 다이나믹프로그래밍
- java
- 자료구조
- lightsail
- t검정
- 보안기사
- 프로그래머스
- 리눅스
- 카카오페이면접후기
- 코딩테스트
- 카카오페이
- 데이터사이언스
- 시간초과
- 정보보안
- springboot
- synflooding
- 정보보안기사
Archives
Techbrad
[백준] 16953번 A → B - 그리디알고리즘 파이썬 본문
반응형
https://www.acmicpc.net/problem/16953
문제 접근 방법
순방향을 A->B라고 한다면 역방향으로 풀면 쉽게 풀 수 있다. 기본적으로 2를 계속 나누고 끝자리가 1이면 1을 제거해 준다. 하지만 종료 조건을 잘 생각해봐야한다.
첫 제출코드
A, B = map(int, input().split(" "))
cnt = 1
while True:
if A == B:
break
elif B < A:
cnt = -1
break
elif B % 10 == 1:
B = B // 10
cnt += 1
else:
B = B//2
cnt += 1
print(cnt)
이렇게 했지만 계속 오류가 났다. 알고 보니 종료 조건에서 B<A만 -1로 업데이트 하는 로직밖에 없어서 55와 같은 숫자를 처리하지 못했다.
최종 제출코드
A, B = map(int, input().split(" "))
cnt = 1
while True:
if A == B:
break
elif (B % 2 !=0 and B % 10 !=1) or (B < A):
cnt = -1
break
elif B % 10 == 1:
B = B // 10
cnt += 1
else:
B = B//2
cnt += 1
print(cnt)
(B % 2 !=0 and B % 10 !=1) 이렇게 조건을 추가하여 -1이 출력되는 조건을 보완해서 성공했다.
그리고 서칭을 해보니 BFS로 푸는 방법이 공유되어 있어 공부해보았다.
결과
반응형
'Programming > 코딩테스트' 카테고리의 다른 글
[백준] 10775 공항 공항 - 파이썬 Union-find (0) | 2023.10.16 |
---|---|
[백준] 1202번 보석도둑 - 우선순위큐 파이썬 (0) | 2023.09.25 |
[백준] 13305번 주유소 - 그리디알고리즘 파이썬 (0) | 2023.09.10 |
[백준] 1931번 회의실 배정 - 그리디알고리즘 파이썬 (0) | 2023.09.07 |
[백준] 1781번 컵라면 - 그리디알고리즘 파이썬 (0) | 2023.09.05 |