<답안>
#include <iostream>
using namespace std;
int main()
{
int M,N,count,location;
int result = 0;
int left,right,temp;
cin>>N>>M>>count;
left = 0;
right = M;
while(count--)
{
cin>>location;
if(location > right)
{
temp = location - right;
result += temp;
right += temp;
left += temp;
}
else if(location <= left)
{
temp = left - location + 1;
result += temp;
left -= temp;
right -= temp;
}
}
cout<<result;
return 0;
}
<설명>
개념자체는 어렵지 않지만 왼쪽, 오른쪽, 이동하는 위치를 잘 고려해서 풀어야 문제없이 계산된다
M으로 입력된 길이를 토대로 왼쪽끝 left를 0, 오른쪽끝 right를 M으로 설정한 다음
입력된 사과의 위치 location 값에 따라 계산이 된다
만약 location이 right보다 큰 경우
-> location - right 만큼 이동해야 함으로 이를 temp로 저장한 다음에
누적이동 result += temp, 오른쪽 right += temp, 왼쪽 left += temp 해주면 된다
왼쪽의 경우가 살짝 헷갈리는데 만약 바구니가 1~2 사이에 위치하고 location이 1이 입력된다 치면 이동을 해야한다
이때 잘 생각해보면 left와 location이 같아도 이동해야 함을 알 수 있다
또한, 이동거리는 location-left 값에서 1을 더해야 함을 알 수 있다 그렇기에
만약 location이 left보다 작거나 같은경우
-> location - left + 1 만큼 이동해야 함으로 이를 temp로 저장한 다음에
누적이동 result += temp, 오른쪽 right -= temp, 왼쪽 left -= temp 해주면 된다
최종 누적된 result를 출력하면 된다
'백준 > Inha Algorithm Study Group' 카테고리의 다른 글
DAY3 고급 - 백준 16120번 (C++) (0) | 2020.09.04 |
---|---|
DAY3 중급 - 백준 17287번 (C++) (0) | 2020.09.04 |
DAY2 고급 - 백준 13022번 (C++) (0) | 2020.09.04 |
DAY2 중급 - 백준 13413번 (C++) (0) | 2020.09.04 |
DAY2 초급 - 백준 11718, 11719번 (C++) (0) | 2020.09.03 |