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
- 반응형 css
- react hook
- zustand란
- LazyVGrid
- featured-sliced-design
- 리렌더링최적화
- @observedobject 프로퍼티 래퍼
- @published 프로퍼티 래퍼
- react fsd
- zustand
- 비동기함수
- BFS
- 페이지이동함수
- 세로모드끄기
- 블로그업로드확인
- 컴퓨터네트워크
- navigationBar 숨기기
- @environmentobject 프로퍼티 래퍼
- 페이지전환
- 가로모드끄기
- C++
- CSS
- 동기 함수 내에서 비동기 함수 호출
- GridItem
- 리액트최적화
- react modal
- react-router-dom
- react상태관리라이브러리
- modal 관리
- LazyHGrid
Archives
- Today
- Total
leebaek
[BOJ/16953번A->B] c++ / BFS 본문
문제
A를 B로 바꾸기 위해 필요한 연산의 최소 개수를 구하는 문제
-2를 곱하거나 숫자 뒤에 1을 붙이는 연산 두가지가 존재
생각
큐에 연산 두가지를 각각 넣어주면 되겠다고 생각함
문제풀이
1.정수 A, B를 입력받음
2.BFS 탐색함
-만약 연산된 A가 B와 같아지면 함수 종료
-만약 A*2가 B보다 작다면 큐에 A*2, cnt+1 푸쉬
-만약 A*10+1이 B보다 작다면 큐에 A*10+1, cnt+1 푸쉬
3.함수에서 반환된 수 출력
처음에 문제를 똑바로 안보고 int 형으로 풀었음 .. 문제 잘 읽기!!!
코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define X first
#define Y second
long long A, B;
long long BFS() {
queue<pair<long long, long long>> Q;
Q.push({A, 1}); // A와 cnt = 1
while (!Q.empty()) {
pair<long long, long long> cur = Q.front(); Q.pop();
if ( cur.X == B )
return cur.Y;
if (cur.X * 2 <= B )
Q.push({cur.X*2, cur.Y+1});
if ( cur.X*10 + 1 <= B )
Q.push({cur.X*10+1, cur.Y+1});
}
return -1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> A >> B;
cout << BFS();
}
'BOJ_C++_PS' 카테고리의 다른 글
[BOJ/5014번스타트링크] c++ / BFS (0) | 2023.10.08 |
---|---|
[BOJ/16234번인구이동] c++ / BFS (1) | 2023.10.07 |
[BOJ/1389번케빈베이컨의6단계 법칙] c++ / BFS (0) | 2023.10.05 |
[BOJ/2644번촌수계산] c++ / BFS (1) | 2023.10.04 |
[BOJ/7562번나이트의이동] c++ / BFS (0) | 2023.10.03 |