모든 칸이 채워진 첫 진열 줄

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

today easy matrix-scan 함수명: solution 제한 시간: 200ms

문제 설명

진열 상태를 나타내는 2차원 배열 shelves가 주어집니다. 각 칸은 0 또는 1이며, 1은 상품이 채워진 상태, 0은 비어 있는 상태를 뜻합니다.

위에서부터 순서대로 보았을 때 모든 칸이 1인 첫 번째 행의 인덱스를 반환하는 solution 함수를 작성하세요. 그런 행이 하나도 없으면 -1을 반환합니다.

예를 들어 [[1, 0, 1], [1, 1, 1], [1, 1, 0]]에서는 두 번째 행이 처음으로 모든 칸이 채워져 있으므로 1을 반환합니다.

제한사항

  • shelves의 길이는 0 이상 1,000 이하입니다.
  • 각 행의 길이는 1 이상 1,000 이하입니다.
  • 모든 원소는 0 또는 1입니다.
  • 반환값은 조건을 만족하는 첫 행의 0-based index이며, 없으면 -1입니다.

예시

  • 입력: [[1, 0, 1], [1, 1, 1], [1, 1, 0]] → 출력: 1
  • 입력: [[1, 1], [1, 1], [0, 1]] → 출력: 0
  • 입력: [[0, 0, 0], [0, 1, 1]] → 출력: -1
  • 입력: [] → 출력: -1

힌트

  • 모든 행을 끝까지 다 셀 필요는 없습니다.
  • 각 행에서 0이 하나라도 나오면 그 행은 바로 탈락입니다.
  • 처음으로 조건을 만족한 행을 찾는 즉시 반환하면 됩니다.

해설

이 문제는 2차원 배열을 위에서 아래로 차례대로 확인하는 순차 탐색 문제입니다.

핵심은 각 행이 다음 조건을 만족하는지만 보는 것입니다.

  • 그 행의 모든 값이 1인가?

풀이 순서는 간단합니다.

  1. 첫 번째 행부터 마지막 행까지 순회합니다.
  2. 현재 행의 각 칸을 보면서 0이 있는지 확인합니다.
  3. 0이 하나도 없다면 그 행은 모든 칸이 채워진 상태이므로 바로 그 인덱스를 반환합니다.
  4. 끝까지 그런 행이 없으면 -1을 반환합니다.

예를 들어 [[1, 0, 1], [1, 1, 1], [1, 1, 0]]에서는:

  • 0번 행은 0이 있으므로 실패
  • 1번 행은 모두 1이므로 정답은 1

이 방식은 필요한 순간 바로 멈출 수 있어서 효율적입니다.

function solution(shelves) {
  for (let i = 0; i < shelves.length; i++) {
    let isFull = true;

    for (const cell of shelves[i]) {
      if (cell === 0) {
        isFull = false;
        break;
      }
    }

    if (isFull) {
      return i;
    }
  }

  return -1;
}

시간 복잡도는 최악의 경우 모든 칸을 한 번씩 확인하므로 O(r * c)입니다.

코드 작성

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

JavaScript 에디터 로딩 중...

커스텀 테스트

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

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

실행 결과

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

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

댓글

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