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

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

바둑돌 나열

면접 대비

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

요약
돌을 하나씩 놓는데, 짝수 번째 돌의 색이 오른쪽 끝 돌과 다르면 끝에 연속한 같은 색 돌 무리를 새 색으로 바꾸고, 마지막에 남는 흰 돌의 개수를 센다.
난이도

보통10점 중 5점

유형
스택, 시뮬레이션, 구현, 배열
정답자
아직 제출이 없습니다

문제

흰색과 검은색 바둑돌을 테이블 위에 한 줄로 나열하는 놀이를 한다. 먼저 테이블의 가장 왼쪽에 바둑돌 하나를 놓고, 그다음 왼쪽에서 22번째 자리에 바둑돌을 놓는다. 이를 nn번 반복하여 nn개의 바둑돌을 가로로 한 줄로 나열한다. 단, 새로 ii번째 바둑돌을 놓을 때는 다음 규칙에 따라 테이블 위의 바둑돌을 바꾼다.

  • ii가 홀수인 경우: 테이블에 이미 놓여 있는 바둑돌은 그대로 두고, 새 바둑돌을 왼쪽에서 ii번째 자리에 놓는다.
  • ii가 짝수인 경우: 새로 왼쪽에서 ii번째에 놓을 바둑돌의 색과 테이블 위 오른쪽 끝 바둑돌의 색이 같으면, 테이블 위의 바둑돌은 바꾸지 않고 새 바둑돌을 왼쪽에서 ii번째 자리에 놓는다. 그렇지 않은 경우, 즉 새로 놓을 바둑돌의 색과 오른쪽 끝 바둑돌의 색이 다르면, 먼저 테이블 오른쪽 끝에 연속으로 놓여 있는 같은 색 바둑돌을 모두 걷어내고 그 자리를 ii번째 바둑돌과 같은 색으로 바꿔 놓는다. 그런 다음 테이블 오른쪽 끝에 ii번째 바둑돌을 놓는다.

예를 들어, 처음 77개의 바둑돌을 놓은 시점에서

○○●●○○○

와 같이 되어 있다고 하자. (○는 흰 바둑돌, ●는 검은 바둑돌을 나타낸다.)

  • 88번째 바둑돌이 흰색(○)인 경우, 오른쪽 끝 바둑돌과 색이 같으므로 그대로 놓는다. 따라서 테이블 위의 바둑돌은
○○●●○○○○

가 된다.

  • 88번째 바둑돌이 검은색(●)인 경우, 오른쪽 끝 바둑돌(○)과 색이 다르므로 먼저 오른쪽 끝에 연속으로 놓인 흰 바둑돌(○) 33개를 걷어내고 검은 바둑돌(●)로 바꿔 놓는다. 그런 다음 오른쪽 끝에 88번째 바둑돌을 놓는다. 따라서 테이블 위의 바둑돌은
○○●●●●●●

가 된다.

입력으로 바둑돌을 놓는 순서가 주어질 때, nn개의 바둑돌을 모두 나열한 뒤 테이블 위에 남아 있는 흰 바둑돌의 개수를 구하는 프로그램을 작성하여라.

입력

첫째 줄에 양의 정수 nn (1≤n≤1000001 \le n \le 100000)이 주어진다. 둘째 줄부터 i+1i+1번째 줄 (1≤i≤n1 \le i \le n)에는 ii번째로 놓는 바둑돌의 색을 나타내는 정수 cic_i가 주어진다. cic_i가 00이면 ii번째 바둑돌의 색이 흰색임을, 11이면 검은색임을 나타낸다.

출력

nn개의 바둑돌을 모두 나열한 뒤 테이블 위에 놓여 있는 흰 바둑돌의 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    8
    1
    0
    1
    1
    0
    0
    0
    0
    
    예상 출력
    6
    
  2. 예제 2

    입력
    8
    1
    0
    1
    1
    0
    0
    0
    1
    
    예상 출력
    2