본문 바로가기

Problem Solving/백준

[백준/C++] 23306번 binary는 호남선


비오길래 구글에 binary호남선 쳤다가 이 문제까지 오게된 건 안비밀..

인터렉티브를 처음 풀어봐서 난해했다.

 

인터렉티브는 출력문을 통해 입력을 받아올 수 있는 다소 신박한 문제였는데 인터렉티브 문제에서 팁을 주자면 표준 입력 버퍼를 비워주지 않으면 버퍼에 남아있는 쓰레기 값이 들어가게 된다. 이 문제에서는 매 입력마다 (여기서는 출력문을 통해 입력을 받으므로) 버퍼를 비워줘야 하니 endl 사용이 적합하다.

 

쉽다고 생각하고 무지성 제출했다가 틀려서 다시보니 질문을 log2(N)번 밖에 못하는 조건이 있었다. 곰곰히 생각해보니 문제에서 힌트를 모두 제공하고 있었다. 시작과 끝만 비교해서 올라간 횟수가 많은지 내려간 횟수가 많은지 확인할 수 있다.(00이나 11은 don't care이고) 0으로 시작해 1로 끝난다면 최소 1번 오르막이 더 많을 것이고 1로 시작해서 0으로 끝나면 최소 1번은 내리막이 많다는 것을 조금만 생각해보면 알 수 있다.


#include <iostream>
#define SETTING ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std ;
int N, answer, sp, ep ;

int main()
{
    cin >> N ;
    cout << "? 1" << endl ;
    cin >> sp ;
    cout << "? " << N << endl ;
    cin >> ep ;
    
    if(sp == ep)
        cout << "! 0" << endl;
    else
        sp > ep ? cout << "! -1" << endl : cout << "! 1" << endl ;
}

느낀점: 문제를 풀던 11/22도 오늘도 비가 오는데 몸이 늘어진다. 인터렉티브를 좀 더 풀어봐야겠다 신박했다.

문제: https://www.acmicpc.net/problem/23306

 

23306번: binary는 호남선

입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해, 의도적으로 제한 조건과 줄 간격 등을 조절한 것이다. 실제 입출력 및 제한 조건과 다른 것에 유의하자. 주어진 binary는 호남선의 철로

www.acmicpc.net