자꾸 문자인데 '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;
}
'C++ > 코드트리' 카테고리의 다른 글
[코드트리] 초기 수열 복원하기 (0) | 2023.08.29 |
---|---|
[코드트리] 이상한 폭탄3 (0) | 2023.08.29 |
[코드트리] A, B, C, D 찾기 2 (0) | 2023.08.25 |
[코드트리] 훌륭한 점프 (0) | 2023.08.23 |
[코드트리] 숫자들의 최대 차 (0) | 2023.08.22 |