본문 바로가기

C++/코드트리

[코드트리] 독서실의 거리두기 4

 

자꾸 문자인데 '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