켜진 구간 개수 세기

자바스크립트 코딩테스트 문제로 run-length 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.

today easy run-length 함수명: solution 제한 시간: 200ms

0과 1로 이루어진 배열 lights가 주어질 때, 연속해서 켜져 있는(1) 구간의 개수를 반환하는 solution 함수를 작성하세요.

제한사항

  • lights의 길이는 1 이상 100,000 이하입니다.
  • 각 원소는 0 또는 1입니다.
  • 1이 하나도 없으면 0을 반환합니다.
  • 서로 떨어진 1 묶음은 각각 다른 구간으로 셉니다.

예시

  • 입력: [0, 1, 1, 0, 1, 1, 1, 0] → 출력: 2
  • 입력: [1, 1, 1, 1] → 출력: 1
  • 입력: [1, 0, 1, 0, 1] → 출력: 3

힌트

  • 모든 1의 개수를 세는 문제가 아니라, 1이 시작되는 순간만 세면 됩니다.
  • 현재 값이 1이고 바로 앞 값이 0이거나, 현재 위치가 배열의 시작이라면 새로운 구간입니다.

해설

이 문제의 핵심은 연속 구간 전체를 세는 것이 아니라 구간의 시작점만 찾는 것입니다.

예를 들어 [0, 1, 1, 0, 1]를 보면:

  • 인덱스 1의 1은 앞이 0이므로 첫 번째 구간 시작
  • 인덱스 2의 1은 앞도 1이므로 같은 구간
  • 인덱스 4의 1은 앞이 0이므로 두 번째 구간 시작

즉, 배열을 한 번만 순회하면서 아래 조건일 때 카운트를 늘리면 됩니다.

  • lights[i] === 1
  • 그리고 i === 0 이거나 lights[i - 1] === 0

이 방식은 불필요하게 구간을 잘라 저장하지 않아도 되므로, 길이가 긴 배열도 효율적으로 처리할 수 있습니다.

코드 작성

starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.

JavaScript 에디터 로딩 중...

커스텀 테스트

함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]

아직 실행하지 않았습니다.

실행 결과

아직 실행하지 않았습니다.

예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.

댓글

문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.