반응형
https://www.acmicpc.net/problem/18235
18235번: 지금 만나러 갑니다
첫 번째 줄에 세 정수 N, A, B가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ A, B ≤ N, A ≠ B)
www.acmicpc.net

[ 문제풀이 ]
1. A와 B를 입력받고, queue에 넣습니다.
2. arr 배열을 만들어서 오리와 육리가 몇 번째 해당 좌표로 갔는지 기록해 줍니다.
3. 오리가 먼저 움직이고 육리가 움직였을 때, 같은 좌표에 있다면 이동 횟수를 출력하고, 같은 좌표에서 만날 수 없다면 -1을 출력합니다.
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 | #include<iostream> #include<queue> using namespace std; int N, A, B; int arr[500001]; int main() { scanf("%d %d %d", &N, &A, &B); fill(arr, arr + N + 1, -1); queue<pair<int, int>> q; q.push({ A,0 }); q.push({ B,0 }); while (!q.empty()) { const int cur = q.front().first; const int cnt = q.front().second; q.pop(); if (arr[cur] == cnt) { printf("%d", cnt); return 0; } arr[cur] = cnt; const int next = 1 << cnt; if (cur - next > 0) { q.push({ cur - next, cnt + 1 }); } if (cur + next <= N) { q.push({ cur + next, cnt + 1 }); } } printf("-1"); } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 2660번 - 회장뽑기 (C++) (0) | 2023.02.28 |
---|---|
[ 백준 ] 2617번 - 구슬 찾기 (C++) (0) | 2023.02.27 |
[ 백준 ] 18405번 - 경쟁적 전염 (C++) (0) | 2023.02.25 |
[ 백준 ] 1613번 - 역사 (C++) (0) | 2023.02.24 |
[ 백준 ] 1162번 - 도로포장 (C++) (0) | 2023.02.23 |