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
- siss
- hackctf
- 백준
- BOJ Python
- c
- CSS
- 드림핵
- 생활코딩
- lob
- 숙명여자대학교 정보보안동아리
- WarGame
- 기계학습
- c++
- hackerrank
- C언어
- XSS Game
- Sookmyung Information Security Study
- SWEA
- 파이썬
- The Loard of BOF
- BOJ
- PHP 웹페이지 만들기
- 숙명여자대학교 정보보안 동아리
- Python
- 자료구조 복습
- Javascript
- 머신러닝
- 풀이
- 웹페이지 만들기
- HTML
Archives
- Today
- Total
혜랑's STORY
[BOJ_C++] 1697번 : 숨박꼭질 본문
code
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <vector>
#include <cmath>
#include <string>
using namespace std;
bool visited[100001];
queue<pair<int, int>> q;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k, pos, depth; cin >> n >> k;
q.push(pair<int, int>(n, 0));
while (!q.empty()) {
pos = q.front().first;
depth = q.front().second;
q.pop();
if (pos == k) break;
visited[pos] = true;
if (pos - 1 >= 0 && !visited[pos - 1])
q.push(pair<int, int>(pos - 1, depth + 1));
if (pos + 1 <= 100000 && !visited[pos + 1])
q.push(pair<int, int>(pos + 1, depth + 1));
if (pos * 2 <= 100000 && !visited[pos * 2])
q.push(pair<int, int>(pos * 2, depth + 1));
}
cout << depth;
return 0;
}
- bfs를 이용하여 각 경우의 수에 대한 결과를 모두 계산한 후 pos와 k가 동일해질 경우 해당 depth를 출력한다.
- 다시말하자면 수빈이가 걷거나(x + 1 or x - 1), 순간이동하는 경우(2 * x)를 모두 계산하고 해당 노드로 이동하여 그에대한 경우를 또 계산한다.
- 이때 pos(x)와 k가 같아지면 해당 depth가 소요된 시간이므로 while문을 탈출하고 depth를 출력한다.
결과
'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[BOJ_C++] 2503번 : 숫자 야구 (0) | 2021.08.17 |
---|---|
[BOJ_C++] 1012번 : 유기농 배추 (0) | 2021.08.17 |
[BOJ_C++] 1260번 : DFS와 BFS (0) | 2021.08.16 |
[BOJ_C++] 2811번 : 상범이의 우울 (0) | 2021.08.16 |
[BOJ_C++] 5671번 : 호텔 방 번호 (0) | 2021.08.16 |