만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

버스 노선 길이

면접 대비

시간 제한2초메모리 제한1024 MB

요약
정수 k와 마을 위치를 나타내는 0과 1의 문자열이 주어질 때, 각 마을에서 오른쪽으로 k개의 마을을 지난 마을까지의 거리를 구합니다.
난이도

쉬움10점 중 3점

유형
배열, 투 포인터
정답자
아직 제출이 없습니다

문제

한 나라의 모든 정착지는 길고 곧은 도로를 따라 놓인 마을이다. 도로를 따라 정류장이 총 nn개 있고, 인접한 두 정류장 사이의 거리는 1킬로미터다. 일부 정류장 옆에는 마을이 있다.

교통부는 마을 사이를 잇는 버스를 운행하기로 했다. 모든 마을에서 노선을 정확히 하나씩 운행한다. 버스는 마을에서 출발해 도로를 따라 오른쪽(정류장 번호가 커지는 방향)으로 이동하다가 마을을 kk개 더 만나거나 마지막 마을에 도착할 때까지 달린다. 그 뒤 버스는 출발 마을로 돌아온다. 가장 마지막 마을에서 출발하는 버스는 오른쪽에 갈 곳이 없어 0킬로미터를 간다. 이런 버스가 누구에게 필요한지는 이 문제의 범위 밖이다. 각 버스 노선의 길이를 구하라.

입력

첫 번째 줄에 정수 kk (1≤k≤300 0001 \leq k \leq 300\,000)가 주어진다. 각 버스가 출발 마을보다 오른쪽에서 방문해야 하는 마을의 수다.

두 번째 줄에 도로를 나타내는 문자열 ss가 주어진다. ss는 '0'과 '1'로만 이루어진다. ii번째 문자가 '1'이면 정류장 ii 옆에 마을이 있고, '0'이면 없다. ss에는 '1'이 하나 이상 있다. ss의 길이는 300000을 넘지 않는다.

출력

ss에 있는 '1'의 개수를 mm이라 하자. 이것이 마을의 수다. 마을에 도로를 따라 왼쪽에서 오른쪽으로, 즉 ss의 앞에서 뒤로 번호를 붙인다. 정확히 mm개의 정수를 출력한다. ii번째 정수는 ii번 마을에서 출발하는 버스의 노선 길이다.

힌트

첫 번째 예시를 살펴보자.

  1. 정류장 1의 마을에서 출발한 버스는 정류장 4의 마을까지 간다. 경로에서 두 번째 마을이기 때문이다.
  2. 정류장 3의 마을에서 출발한 버스는 정류장 6의 마을까지 간다. 경로에서 두 번째 마을이기 때문이다.
  3. 정류장 4의 마을에서 출발한 버스는 정류장 6의 마을까지 간다. 도로에서 마지막 마을이기 때문이다.
  4. 정류장 6의 마을에서 출발한 버스는 정류장 6의 마을까지 간다. 도로에서 마지막 마을이기 때문이다.

예제3

  1. 예제 1

    입력
    2
    101101
    
    예상 출력
    6 6 4 0
    
  2. 예제 2

    입력
    1
    10010001000
    
    예상 출력
    6 8 0
    
  3. 예제 3

    입력
    10
    111
    
    예상 출력
    4 2 0