최고 점수를 새로 깬 날 세기

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

today easy record-break-count 함수명: countRecordBreakingScoreDays 제한 시간: 200ms

문제 설명

하루마다 기록된 점수 배열 scores가 주어집니다.

앞의 모든 날보다 점수가 높은 날을 “기록 갱신일”이라고 할 때, 기록 갱신일이 총 며칠인지 구하는 countRecordBreakingScoreDays 함수를 작성하세요.

첫 번째 점수는 비교할 이전 기록이 없으므로 점수가 존재한다면 항상 기록 갱신일입니다.

제한사항

  • scores는 정수 배열입니다.
  • 0 <= scores.length <= 100000
  • -100000 <= scores[i] <= 100000
  • 이전 최고 점수와 같은 점수는 기록 갱신일로 세지 않습니다.
  • scores가 빈 배열이면 0을 반환합니다.

예시

  • 입력: scores = [10, 12, 9, 15, 15, 18] -> 출력: 4
  • 입력: scores = [5, 5, 5] -> 출력: 1
  • 입력: scores = [] -> 출력: 0
  • 입력: scores = [-3, -2, -5, -1] -> 출력: 3

힌트

  • 지금까지 본 점수 중 가장 큰 값을 변수 하나에 저장해 보세요.
  • 현재 점수가 그 값보다 클 때만 정답을 1 늘리면 됩니다.
  • 같은 점수는 새 기록이 아니므로 >=가 아니라 > 비교가 필요합니다.

해설

이 문제는 배열을 한 번 순회하면서 현재까지의 최고 점수를 관리하는 구현 문제입니다.

예를 들어 scores = [10, 12, 9, 15, 15, 18]일 때 기록 갱신은 다음처럼 일어납니다.

  1. 10은 첫 점수이므로 기록 갱신입니다.
  2. 12는 이전 최고 점수 10보다 크므로 기록 갱신입니다.
  3. 9는 최고 점수 12보다 작으므로 세지 않습니다.
  4. 1512보다 크므로 기록 갱신입니다.
  5. 다음 15는 현재 최고 점수와 같으므로 세지 않습니다.
  6. 1815보다 크므로 기록 갱신입니다.

따라서 기록 갱신일은 총 4일입니다.

풀이 순서는 다음과 같습니다.

  1. 기록 갱신 횟수 count를 0으로 둡니다.
  2. 현재까지의 최고 점수 best를 아주 작은 값으로 준비합니다.
  3. scores를 앞에서부터 순회합니다.
  4. 현재 점수가 best보다 크면 count를 1 늘리고 best를 현재 점수로 갱신합니다.
  5. 순회가 끝나면 count를 반환합니다.

각 점수를 한 번씩만 확인하므로 시간 복잡도는 O(n)입니다.

코드 작성

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

JavaScript 에디터 로딩 중...

커스텀 테스트

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

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

실행 결과

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

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

댓글

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