시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 (추가 시간 없음) 512 MB (추가 메모리 없음)80038431045.858%

문제

binary는 호남선~

num row column char에~

binary는 호남선은 총 $N$개의 01로 표현할 수 있다. 0은 저지대를 지나는 철로를 나타내고, 1은 고지대를 지나는 철로를 나타낸다.

binary는 호남선의 구간은 연속된 두 개의 철로를 뜻한다. 01은 오르막 구간, 10은 내리막 구간, 0011은 평탄한 구간이다.

binary는 호남선의 각 구간이 어떤 구간인지 파악하고 상대적 많고 적음을 알아내는 것은, 철로의 유지보수를 위해 매우 중요한 일이다.

입력

binary는 호남선의 철로 길이 $N$이 주어진다. ($8 \leq N < 2\ 048$)

출력

다음을 표준 출력 스트림(stdout)으로 한 줄에 출력하여, 해당 위치의 철로가 무언인지 알아낼 수 있다.

  • ? $k$ : 왼쪽부터 $k$번째 철로를 출력한다. ($1 \leq k \leq N$)

각 질문을 출력한 후에는 반드시 표준 출력 버퍼를 flush 해야 하고, 표준 입력 스트림(stdin)을 통해 질문에 대한 답을 입력받아야 한다. 그렇지 않으면, 시간 초과 또는 런타임에러를 받는다.

질문하는 $k$의 범위가 철로 구간을 벗어나는 경우, 틀렸습니다를 받는다.

질문은 최대 $\lfloor log_2 N \rfloor$번 할 수 있고, 이보다 더 많이 질문을 하면 틀렸습니다를 받는다.

최대 $\lfloor log_2 N \rfloor$번의 질문을 이용해, 정답을 아래의 표준 출력 스트림(stdout)을 이용해 한 번만 출력한다.

  • ! $a$ : binary는 호남선에서 오르막 구간의 수가 내리막 구간의 수보다 많다면 1을, 같다면 0을, 적다면 -1을 출력한다.

그 후 반드시 표준 출력 버퍼를 flush해야 하고, 프로그램을 종료한다. 이것은 질문 횟수에 포함되지 않는다.

예제 입력 1

4

0

0

1

1
 

예제 출력 1

 
? 1

? 3

? 4

? 2

! 1

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

주어진 binary는 호남선의 철로는 0101이므로 오르막 구간이 $2$개, 내리막 구간이 $1$개 있다. 따라서 1을 출력하면 정답이다.

노트

출력 후에는 표준 출력 버퍼를 flush해 주어야 한다. 언어 별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.

  • C: fflush(stdout)
  • C++: std::cout << std::flush
  • Java: System.out.flush()
  • Python: sys.stdout.flush()
  • Kotlin: System.out.flush()

채점 및 기타 정보

  • 예제는 채점하지 않는다.