최고 점수를 새로 깬 날 세기
자바스크립트 코딩테스트 문제로 record-break-count 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
문제 설명
하루마다 기록된 점수 배열 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]일 때 기록 갱신은 다음처럼 일어납니다.
10은 첫 점수이므로 기록 갱신입니다.12는 이전 최고 점수10보다 크므로 기록 갱신입니다.9는 최고 점수12보다 작으므로 세지 않습니다.15는12보다 크므로 기록 갱신입니다.- 다음
15는 현재 최고 점수와 같으므로 세지 않습니다. 18은15보다 크므로 기록 갱신입니다.
따라서 기록 갱신일은 총 4일입니다.
풀이 순서는 다음과 같습니다.
- 기록 갱신 횟수
count를 0으로 둡니다. - 현재까지의 최고 점수
best를 아주 작은 값으로 준비합니다. scores를 앞에서부터 순회합니다.- 현재 점수가
best보다 크면count를 1 늘리고best를 현재 점수로 갱신합니다. - 순회가 끝나면
count를 반환합니다.
각 점수를 한 번씩만 확인하므로 시간 복잡도는 O(n)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
JavaScript
에디터 로딩 중...
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
아직 실행하지 않았습니다.
실행 결과
아직 실행하지 않았습니다.
예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.