점수계산 JavaScript 풀이

2026.09.17·약 4분·작성: 해비·블로그 소개

정답이 연속될수록 다음 정답의 점수가 1점씩 커지는 채점 방식을 계산하는 문제입니다. 현재 연속 정답 수와 전체 점수를 따로 관리하면 배열을 한 번만 순회해 답을 구할 수 있습니다.

문제

N개의 채점 결과가 순서대로 주어집니다. 정답은 1, 오답은 0입니다. 정답을 처음 맞히면 1점을 받고, 정답이 연속될 때마다 해당 문제의 점수가 1점씩 증가합니다. 오답이 나오면 연속 점수는 0으로 초기화됩니다. 모든 문제를 채점한 총점을 출력해야 합니다.

N은 1 이상 100 이하의 자연수이며, 둘째 줄에는 N개의 0 또는 1이 주어집니다. 예제 입력이 1 0 1 1 1 0 0 1 1 0이면 각 문제의 점수는 1, 0, 1, 2, 3, 0, 0, 1, 2, 0이므로 총점은 10점입니다.

구간 채점 결과 획득 점수
첫 번째 정답 1 1
세 문제 연속 정답 1 1 1 1 + 2 + 3
오답 0 0, 연속 점수 초기화
두 문제 연속 정답 1 1 1 + 2

풀이와 정답

풀이와 정답 보기 (클릭)

매 문제에서 필요한 상태는 현재 연속 정답 수와 지금까지의 총점뿐입니다. 정답이면 연속 정답 수를 1 증가시킨 뒤 그 값을 총점에 더합니다. 오답이면 총점은 그대로 두고 연속 정답 수만 0으로 되돌립니다.

알고리즘 설계

정답이 이어질수록 점수가 증가하고 오답에서 연속 점수가 초기화되는 과정

streak는 현재 정답이 몇 번 연속됐는지 나타냅니다. 정답을 만나면 먼저 streak를 증가시키고, 증가한 값을 totalScore에 더합니다. 이 순서를 지켜야 첫 정답은 1점, 두 번째 연속 정답은 2점으로 계산됩니다.

오답에서는 streak만 0으로 초기화합니다. 이미 얻은 점수까지 지우면 안 되므로 totalScore는 변경하지 않습니다. 다음 정답이 나오면 다시 1점부터 시작합니다.

JavaScript 풀이

한 번의 순회로 현재 연속 점수와 전체 점수를 함께 누적하는 처리 흐름
const fs = require("fs");

const inputText = fs.readFileSync(0, "utf8");
const input = inputText
  .trim()
  .replaceAll(String.fromCharCode(13), " ")
  .replaceAll(String.fromCharCode(10), " ")
  .split(" ")
  .filter(Boolean)
  .map(Number);
const count = input[0];
const results = input.slice(1, count + 1);
let streak = 0;
let totalScore = 0;

for (const result of results) {
  if (result === 1) {
    streak += 1;
    totalScore += streak;
  } else {
    streak = 0;
  }
}

console.log(totalScore);

입력의 CR과 LF를 공백으로 바꾸고 빈 값을 제거하므로 Windows의 CRLF와 Linux의 LF 줄바꿈을 모두 처리합니다. 첫 값은 문제 수이고, 그다음 N개만 채점 결과로 사용합니다.

복잡도와 검증

N개의 결과를 한 번씩 확인하므로 시간 복잡도는 O(N)입니다. 입력 배열을 제외하면 연속 점수와 총점 변수만 사용하므로 추가 공간 복잡도는 O(1)입니다.

검증 항목 입력 특징 기대 출력
제공 예제 연속 정답과 오답이 섞임 10
최소 입력 N=1, 오답 한 개 0
정답 한 개 N=1, 정답 한 개 1
모두 정답 정답 네 개가 연속됨 10
모두 오답 오답만 이어짐 0

배열을 한 번 순회하면서 상태를 갱신하는 흐름은 보이는 학생 JavaScript 풀이에서 먼저 익힐 수 있습니다. 같은 위치의 값을 조건으로 판정하는 다음 유형은 가위바위보 JavaScript 풀이도 참고할 수 있습니다.

이 글이 도움이 되었나요?

조회 중

코딩테스트 JavaScript 학습 순서

필수 49개 · 전체 49개

읽음 기록 관리

전체 과정 목차 (49개)
  1. 필수 길잡이 · 코딩테스트 JS 자료구조 로드맵: 배열, 해시, 스택, 투 포인터 순서
  2. 필수 학습 · 세 수 중 최솟값 JavaScript 조건문 풀이 정리
  3. 필수 학습 · 삼각형 판별하기 JavaScript 풀이
  4. 필수 학습 · 연필 개수 JavaScript 풀이
  5. 필수 학습 · 1부터 N까지 합 출력하기 JavaScript 풀이
  6. 필수 학습 · 최솟값 구하기 JavaScript 풀이|배열 순회와 비교 갱신 원리
  7. 필수 학습 · 홀수 JavaScript 풀이: 조건 판별과 결과 처리 정리
  8. 필수 학습 · 10부제 JavaScript 풀이: 끝자리 비교로 위반 차량 수 세기
  9. 필수 학습 · A를 #으로 JavaScript 풀이: 문자열 순회와 치환
  10. 필수 학습 · 문자 찾기 JavaScript 풀이: 문자열 순회로 개수 세기
  11. 필수 학습 · 대문자 찾기 JavaScript 풀이
  12. 필수 학습 · 대문자로 통일 JavaScript 풀이
  13. 필수 학습 · 대소문자 변환 JavaScript 풀이
  14. 필수 학습 · 일곱 난쟁이 JavaScript 풀이: 두 명을 제외하는 완전탐색
  15. 필수 학습 · 코딩테스트 JS Map 풀이: 학급 회장 득표수 세기
  16. 필수 학습 · 코딩테스트 JS 스택 풀이: 올바른 괄호 검증하기
  17. 필수 학습 · 코딩테스트 JS 스택 풀이: 괄호문자 제거하기
  18. 필수 학습 · 코딩테스트 JS 스택 풀이: 크레인 인형뽑기 처리법
  19. 필수 학습 · 코딩테스트 JS 스택 풀이: 후위식 연산 계산하기
  20. 필수 학습 · 코딩테스트 JS 스택 풀이: 쇠막대기 레이저 절단 개수 세기
  21. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 두 정렬 배열 합치기
  22. 필수 학습 · 코딩테스트 JS 투 포인터 풀이: 공통 원소 추출하기
  23. 필수 학습 · 코딩테스트 JS 슬라이딩 윈도우 풀이: 최대 매출 구간 합 계산하기
  24. 필수 학습 · JavaScript 투 포인터: 합이 M인 연속 부분수열 개수
  25. 필수 학습 · 코딩테스트 JS 해시 풀이: 모든 아나그램 찾기
  26. 필수 학습 · 가장 긴 문자열 JavaScript 풀이
  27. 필수 학습 · 가운데 문자 출력 JavaScript 풀이
  28. 필수 학습 · 중복문자제거 JavaScript 풀이
  29. 필수 학습 · 코딩테스트 JS 고급: 최소 힙으로 다익스트라 최단 경로 구하기
  30. 필수 학습 · 코딩테스트 JS Union-Find: 연결 성분 수와 크기 구하기
  31. 필수 학습 · 코딩테스트 JS Trie: 접두사에 맞는 단어 수 세기
  32. 필수 학습 · 코딩테스트 JS Fenwick Tree: 값 갱신과 구간 합 처리
  33. 필수 학습 · 코딩테스트 JS 세그먼트 트리: 단일 대입과 구간 합
  34. 필수 학습 · 코딩테스트 JS LRU 캐시: 지도 타일 재사용 기록
  35. 필수 학습 · 코딩테스트 JS AVL 트리: 기준 이상 최솟값 찾기
  36. 필수 학습 · 코딩테스트 JS 큐: 상담 창구 대기열 명령 처리
  37. 필수 학습 · 코딩테스트 JS 연결 리스트: 재생 대기 목록 관리
  38. 필수 학습 · JavaScript 원형 덱 연습: 최근 기록 창과 되돌리기
  39. 필수 학습 · JavaScript 해시 테이블 연습: 정규화 문자열 빈도와 등장 순서
  40. 필수 학습 · JavaScript 트리 순회 연습: 깊이별 노드 묶기
  41. 필수 학습 · JavaScript BST 연습: 닫힌 구간의 중복 키 보고서
  42. 필수 학습 · JavaScript 최소 힙 연습: 동률 순서를 지키는 작업 스케줄러
  43. 필수 학습 · JavaScript 그래프 연습: 연결 구역 크기를 작은 순서로 출력하기
  44. 필수 학습 · 중복단어제거 JavaScript 풀이
  45. 필수 학습 · TypeScript 이진 탐색 연습: 숫자 카드 존재 여부 확인
  46. 필수 학습 · 큰 수 출력하기 JavaScript 풀이
  47. 필수 학습 · 보이는 학생 JavaScript 풀이
  48. 필수 학습 · 가위바위보 JavaScript 풀이
  49. 필수 학습 · 점수계산 JavaScript 풀이 현재 글

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기