17071. 숨바꼭질 5 본문
문제링크 : https://www.acmicpc.net/problem/17071
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <iostream> #include <queue> using namespace std; bool visited[2][500001] = { false }; // 홀수번째 짝수번째 따로(진동 가능) int main(void) { int startC; int startB; cin >> startB >> startC; queue<int> myQ; myQ.push(startB); visited[0][startB] = true; int turn = 1; if (startC == startB) { cout << "0"; return 0; } while (!myQ.empty()) { startC += turn; if (startC > 500000) { cout << "-1"; return 0; } if (visited[turn % 2][startC]) { cout << turn; return 0; } int size = myQ.size(); for (int i = 0; i < size; i++) { int temp = myQ.front(); myQ.pop(); if (temp + 1 == startC || temp - 1 == startC || temp * 2 == startC) { cout << turn; return 0; } else { if (temp + 1 <= 500000 && !visited[turn % 2][temp + 1]) { myQ.push(temp + 1); visited[turn % 2][temp + 1] = true; } if (temp - 1 >= 0 && !visited[turn % 2][temp - 1]) { myQ.push(temp - 1); visited[turn % 2][temp - 1] = true; } if (temp * 2 <= 500000 && !visited[turn % 2][temp * 2]) { myQ.push(temp * 2); visited[turn % 2][temp * 2] = true; } } } turn++; } cout << "-1"; return 0; } | cs |
'알고리즘 문제풀기 > 백준(Acmicpc)' 카테고리의 다른 글
17136. 색종이 붙이기 (0) | 2019.04.12 |
---|---|
7569. 토마토 (0) | 2019.03.06 |
16987. 계란으로 계란치기 (2) | 2019.03.02 |
16986. 인싸들의 가위바위보 (0) | 2019.03.02 |
1322. X와 K (0) | 2019.01.31 |
Comments