백준/골드
[백준 28325번] 호숫가의 개미굴 (C++)
게임개발기원
2023. 7. 26. 15:31
문제링크 : https://www.acmicpc.net/problem/28325
28325번: 호숫가의 개미굴
KOI 호숫가에 여러 개미가 모여 사는 개미굴이 있다. 개미굴은 둥근 호수의 둘레를 따라 $1$부터 $N$까지의 번호가 붙은 $N$개의 방이 차례대로 원형으로 배치되어 있으며, 모든 $i$ ($1 \le i \le N-1$)에
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
ll arr[250002];
ll result = 0;
ll cnt = 0;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0; i<N; i++)
{
cin >> arr[i];
result += arr[i]; //쪽방 개미 수 더해주기
}
if(result == 0)
{
cout << N/2;
return 0;
}
int front = -1, end = -1;
for(int i=0; i<N; i++)
{
if(arr[i] && front==-1) front=i; //첫 굴 위치
if(arr[i] && front!=-1) end=i; //마지막 굴 위치
}
for(int i=front; i<=end; i++) //첫 굴 ~ 마지막 굴 사이에 없는 굴 갯수 체크
{
if(!arr[i]) cnt++;
else
{
result += (cnt+1)/2;
cnt=0;
}
}
int diff = front-1 + N-end; //마지막 굴 ~ 첫 굴 사이에 없는 굴 갯수 체크
result +=(diff+1)/2;
cout << result;
return 0;
}
쪽방을 모두 활용하는 것이 최적해이므로 쪽방에 있는 개미들을 모두 더해주고 시작한다.
만약 쪽방이 하나도 없다면 N/2를 출력한다.
그리고 배열을 탐색하며 첫 굴의 위치와 마지막 굴의 위치를 저장한다.
첫 굴 ~ 마지막 굴을 탐색하며 사이에 굴이 없는 경우를 카운팅하고 이때 가능한 최대 갯수를 따로 더해준다.
이렇게 탐색을 하면 마지막 굴 ~ 첫 굴 사이도 따로 탐색을 해줘야 한다.
그렇기에 첫 굴 앞에 존재할 수 있는 없는 굴 갯수인 front-1에 마지막굴 뒤에 존재할 수 있는 N-end를 더해주고 최종 result를 출력한다.