가장 앞의 빈 사물함 찾기

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

today easy availability-scan 함수명: findFirstEmptyLocker 제한 시간: 200ms

문제 설명

사물함의 사용 상태를 나타내는 문자열 lockers가 주어집니다.

문자 #은 이미 사용 중인 사물함, 문자 .은 비어 있는 사물함을 의미합니다.

왼쪽에서 오른쪽으로 확인했을 때 가장 먼저 비어 있는 사물함의 인덱스를 반환하는 findFirstEmptyLocker 함수를 작성하세요. 비어 있는 사물함이 하나도 없다면 -1을 반환합니다.

제한사항

  • 0 <= lockers.length <= 100000
  • lockers#. 문자로만 이루어져 있습니다.
  • 인덱스는 0부터 시작합니다.
  • 반환값은 가장 앞의 . 위치입니다.
  • .이 없으면 -1을 반환합니다.

예시

  • 입력: lockers = "##.##" -> 출력: 2
  • 입력: lockers = ".###" -> 출력: 0
  • 입력: lockers = "####" -> 출력: -1
  • 입력: lockers = "" -> 출력: -1
  • 입력: lockers = "#.#." -> 출력: 1

힌트

  • 문자열도 인덱스로 각 문자를 확인할 수 있습니다.
  • 왼쪽부터 순회하다가 .을 만나면 바로 그 인덱스를 반환해도 됩니다.
  • 인덱스 0도 올바른 정답이 될 수 있습니다.

해설

이 문제는 문자열을 앞에서부터 한 번 훑으며 원하는 문자를 찾는 단순 탐색 문제입니다.

예를 들어 lockers = "##.##"라면 0번과 1번 사물함은 사용 중이고, 2번 사물함이 처음으로 비어 있습니다. 따라서 답은 2입니다.

반대로 lockers = ".###"처럼 첫 번째 사물함이 비어 있다면 답은 0입니다. 이때 0은 실패를 뜻하는 값이 아니라 실제 위치이므로 그대로 반환해야 합니다.

풀이 흐름은 다음과 같습니다.

  1. 0번 인덱스부터 lockers.length - 1까지 순회합니다.
  2. 현재 문자가 .이면 현재 인덱스를 즉시 반환합니다.
  3. 끝까지 .을 찾지 못하면 -1을 반환합니다.

문자열의 각 문자를 최대 한 번만 확인하므로 시간 복잡도는 O(n)입니다. 별도의 배열이나 객체를 만들 필요가 없어 공간 복잡도는 O(1)입니다.

코드 작성

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

JavaScript 에디터 로딩 중...

커스텀 테스트

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

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

실행 결과

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

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

댓글

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