C++/코드트리
[코드트리] 독서실의 거리두기 4
sondiaa
2023. 8. 25. 02:48
자꾸 문자인데 '1' 이렇게 대입 안하고 1을 넣는다,,
이런 잔실수때문에 뭐가 문제인지 한참 입출력으로 디버그했다.
풀이과정
1. 0인 곳 2곳을 임의로 정해서 1로 바꿔주기
2. 전체 스캔하면서 1과 1사이의 거리 최솟값 구하기
3. 구한 최솟값 중에 최댓값만 남기기
#include <iostream>
#include <algorithm>
using namespace std;
int n;
string seats;
int getMin(){
int minNum = 21e8, lastFlag = -1, nowFlag = -1;
for(int i=0; i<n; i++){
char now = seats[i];
if(now == '1')
nowFlag = i;
else nowFlag = -1;
if(nowFlag != -1){
if(lastFlag != -1){
int sub = nowFlag - lastFlag;
minNum = min(minNum, sub);
//cout << lastFlag << ' ' << nowFlag << " : " << minNum << '\n';
}
lastFlag = nowFlag;
}
}
// cout << minNum << '\n';
return minNum;
}
int main() {
cin >> n >> seats;
int answer = -21e8;
for(int i=0; i<n; i++){
for(int j=i+ 1; j<n; j++){
if(seats[i] == '1' || seats[j] == '1') continue;
seats[i] = '1';
seats[j] = '1';
// cout << i << ' ' << j <<'\n';
answer = max(answer, getMin());
seats[i] = seats[j] = 0;
}
}
cout << answer;
return 0;
}