허용 지연을 넘긴 버스 수

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

today easy schedule-delay-scan 함수명: countBusesOverDelayLimit 제한 시간: 200ms

버스별 예정 도착 시각과 실제 도착 시각을 비교해 허용 지연 시간을 넘긴 버스가 몇 대인지 세어 보세요.

문제 설명

버스의 예정 도착 시각 배열 planned, 실제 도착 시각 배열 actual, 허용 지연 시간 limit이 주어집니다.

두 배열의 같은 인덱스는 같은 버스를 의미합니다. actual[i] - planned[i]limit보다 큰 버스만 지연 초과로 세어, 지연 초과 버스의 수를 반환하는 countBusesOverDelayLimit 함수를 작성하세요.

시각은 모두 하루가 시작된 뒤 지난 분 단위 숫자로 주어집니다. 예를 들어 540은 09:00을 의미합니다.

제한사항

  • plannedactual은 정수 배열입니다.
  • planned.length === actual.length입니다.
  • 0 <= planned.length <= 100,000
  • 각 시각은 0 이상 1,439 이하의 정수입니다.
  • limit0 이상 1,439 이하의 정수입니다.
  • 자정을 넘기는 운행은 입력으로 주어지지 않습니다.
  • 지연 시간이 limit와 정확히 같으면 지연 초과가 아닙니다.
  • 반환값은 지연 초과 버스의 개수입니다.

예시

  • 입력: planned = [540, 600, 660], actual = [545, 617, 661], limit = 10 → 출력: 1
  • 입력: planned = [100, 200], actual = [110, 205], limit = 10 → 출력: 0
  • 입력: planned = [], actual = [], limit = 5 → 출력: 0
  • 입력: planned = [300, 400, 500], actual = [290, 420, 530], limit = 20 → 출력: 1

힌트

  • 두 배열을 같은 인덱스로 함께 순회하면 됩니다.
  • actual[i] - planned[i] > limit인 경우만 카운트를 늘리세요.
  • 실제 도착 시각이 더 빠르면 차이가 음수가 되므로 자연스럽게 제외됩니다.

해설

이 문제는 같은 위치의 값끼리 비교하는 단순한 배열 순회 문제입니다.

각 버스에 대해 실제 도착 시각에서 예정 도착 시각을 빼면 지연 시간이 나옵니다. 이 값이 limit보다 클 때만 지연 초과입니다. limit와 정확히 같은 경우는 허용 범위 안이므로 세지 않습니다.

예를 들어 planned = [540, 600, 660], actual = [545, 617, 661], limit = 10이면 지연 시간은 각각 5, 17, 1분입니다. 이 중 10분을 넘긴 버스는 두 번째 버스 하나뿐이므로 답은 1입니다.

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

  1. 지연 초과 버스 수를 저장할 count0으로 시작합니다.
  2. 0번 인덱스부터 마지막 인덱스까지 순회합니다.
  3. actual[i] - planned[i]limit보다 크면 count를 1 늘립니다.
  4. 모든 버스를 확인한 뒤 count를 반환합니다.

배열을 한 번만 순회하므로 시간 복잡도는 O(n)이고, 별도의 큰 자료구조가 필요하지 않으므로 공간 복잡도는 O(1)입니다.

코드 작성

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

JavaScript 에디터 로딩 중...

커스텀 테스트

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

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

실행 결과

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

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

댓글

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