아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

올바른 바이너리 문자열

면접 대비

시간 제한1초메모리 제한128 MB

요약
지워진 자리가 있는 이진 문자열이 주어질 때, 0과 1의 개수가 같고 같은 문자가 세 번 연속 나오지 않도록 채울 수 있는지 판정한다.
난이도

보통10점 중 6점

유형
그리디, 문자열, 구현, 투 포인터
정답자
아직 제출이 없습니다

문제

0과 1로만 이루어진 문자열을 바이너리 문자열이라고 한다. 다음 두 조건을 모두 만족하는 바이너리 문자열을 올바른 바이너리 문자열이라고 부른다.

  1. 개수 균형: 문자열에 들어 있는 0의 개수와 1의 개수가 서로 같다.
  2. 연속 제한: 같은 문자가 3번 이상 연속해서 나타나지 않는다. 즉, 연속된 0 또는 연속된 1의 길이가 최대 2이다.

일부 글자가 지워진 바이너리 문자열이 주어진다. 지워진 자리를 각각 0 또는 1로 채워서 문자열 전체를 올바른 바이너리 문자열로 만들 수 있는지 판별하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT (T≤100T \le 100)가 주어진다.

각 테스트 케이스는 한 줄에 하나씩 주어지며, 문자 0, 1, .으로 이루어진 문자열이다. 여기서 .은 지워진 자리를 뜻한다. 문자열의 길이는 2 이상 100,000 이하의 짝수이다.

출력

각 테스트 케이스에 대해, 주어진 문자열을 올바른 바이너리 문자열로 만들 수 있으면 yes를, 만들 수 없으면 no를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    6
    001100110011
    110..0...00...0011
    ..............
    01....100100
    010101110100
    101011011001
    
    예상 출력
    yes
    yes
    yes
    no
    no
    no
    
  2. 예제 2

    입력
    5
    01
    10
    00
    11
    ..
    
    예상 출력
    yes
    yes
    no
    no
    yes