알고리즘/BOJ
[BOJ 2828, C++] 사과 담기 게임
70825
2021. 7. 27. 23:58
반응형
https://www.acmicpc.net/problem/2828
2828번: 사과 담기 게임
상근이는 오락실에서 바구니를 옮기는 오래된 게임을 한다. 스크린은 N칸으로 나누어져 있다. 스크린의 아래쪽에는 M칸을 차지하는 바구니가 있다. (M<n) 플레이어는="" 게임을="" 하는="" 중에="" 바구니를="" <="" p=""> </n)>
www.acmicpc.net
풀이
사과가 떨어지는 곳은 3가지 경우로 나누어서 확인할 수 있다.
1. 사과의 좌표가 바구니 왼쪽 끝보다 왼쪽에 있을 때
2. 사과의 좌표가 바구니 범위 안에 있을 때
3. 사과의 좌표가 바구니 오른쪽 끝보다 오른쪽에 있을 때
1번의 경우에는 바구니 왼쪽 끝을 사과의 좌표로 옮기면 되고, 2번의 경우엔 굳이 움직이지 않아도 된다.
3번의 경우에는 바구니의 오른쪽 끝을 사과의 좌표로 옮겨주면 된다.
이렇게해서 바구니의 왼쪽 끝과 오른쪽 끝의 좌표를 변수로 두어서 사과의 좌표가 주어질 때마다 업데이트해주면 된다.
코드
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 | #include <iostream> #include <cstring> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, j; cin >> n >> m; cin >> j; int x = 1, y = m, ans = 0, d; for (int i = 0; i < j; i++) { cin >> d; if (d < x) { ans += x - d; y -= (x - d); x = d; } if (d > y) { ans += d - y; x += d - y; y = d; } } cout << ans << endl; } | cs |
반응형