** 이 글을 읽음에 앞서 포스팅 된 소스가 100% 정답은 아님을 밝힙니다.
더욱 유능한 분께서 클린 / 최적의 소스를 짜셨을 가능성이 높습니다.
기록용으로 남기며, 참고만 부탁드립니다.
** 백준 알고리즘은 직접 풀이를 해보시는 것을 권장합니다.
● 문제
난이도[티어] : 실버 5
백준 알고리즘 2828번 사과 담기 게임
https://www.acmicpc.net/problem/2828
● 풀이 방법
바구니가 어느 스크린까지 받을 수 있는지 체크를 하는 것이 포인트.
그 다음 사과가 떨어지는 스크린영역에 바구니가 있는지 여부에 따라 움직임 횟수를 체크하면 된다.
● 소스 코드
#include <iostream>
int main() {
int line, bucket_size, apple_cnt;
int result = 0, bucket_l = 1, bucket_r;
std::cin >> line >> bucket_size >> apple_cnt;
bucket_r = bucket_size;
for(int i = 0; i < apple_cnt; i++){
int apple_position, move_cnt = 0;
std::cin >> apple_position;
//바구니가 이동해야하는지? 이동하면 어디로 얼만큼 이동해야 하는지?
if(bucket_l > apple_position)
move_cnt = apple_position-bucket_l;
else if(bucket_r < apple_position)
move_cnt = apple_position-bucket_r;
result += abs(move_cnt);
bucket_l += move_cnt;
bucket_r += move_cnt;
}
std::cout << result;
return 0;
}
바구니의 영역을 바구니 우측(bucket_r) / 바구니 좌측(bucket_l) 으로 구분지어서 영역 체크가 가능하다.
이후 사과가 떨어지는 스크린에 바구니 위치를 확인하고 이동해야 할 경우 count.
<stdlib.h> 라이브러리를 통해 사용한 함수
- abs() : 절대값 구하기
#include <stdlib.h>
int abs(int n);
● 결과
** 코드 길이가 상이 할 수 있습니다! 그러나 내용물은 같습니다.
이유) 주석 및 더미 소스 유무
'백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘 C/C++] 1010번 문제 풀이 : 다리 놓기 (1) | 2024.03.24 |
---|---|
[백준 알고리즘 C/C++] 3474번 문제 풀이: 교수가 된 현우 (1) | 2024.03.24 |
[백준 알고리즘 C/C++] 14916번 문제 풀이 : 거스름돈 (0) | 2024.03.13 |
[백준 알고리즘 C/C++] 2217번 문제 풀이 : 로프 (0) | 2024.03.13 |
[백준 알고리즘 C/C++] 1343번 문제 풀이 : 폴리오미노 (0) | 2024.03.13 |