[Do it! 알고리즘 코딩 테스트 자바] 백준 10986나머지 합- 구간합/나머지 연산의 활용(3일차)

2026. 2. 26. 01:05·Java

1. 주요 오개념 및 시행착오 (Pain Point)

  • 연속된 부분의 정의: '연속된'이라는 표현을 인접한 두 요소의 합으로 한정 지어 오해함. 실제로는 시작점 i와 끝점 j 사이의 모든 요소를 포함하는 임의의 구간 합을 의미함을 인지함.
  • 조합(nC_2) 활용의 당위성: 순서가 없는 조합을 사용하는 이유에 대해 의문이 있었으나, 누적 합 나머지가 같은 두 지점을 선택하는 행위가 곧 하나의 유일한 연속 구간을 정의하는 경계선 역할을 수행함을 이해함.
  • 시간 복잡도 설계 오류: 모든 구간을 전수 조사하는 O(N^2) 방식은 데이터 100만 개 기준 약 1조 번의 연산이 발생하여 시간 초과(TLE)가 불가피함. O(N)으로의 최적화 필요성을 체감함.

 

2. 핵심 원리 및 수학적 근거 (Logic & Math)

  • 나머지 연산의 뺄셈 분배 법칙: 구간 합의 나머지가 0이 되기 위한 조건은 다음과 같음.
  •  
  • (S[j] - S[i]) % M = 0 -> S[j] % M = S[i] % M
  • 수학적 귀결: 누적 합 배열에서 나머지 값이 동일한 두 지점을 선택(nC_2)하면, 그 사이 구간의 합은 반드시 M의 배수가 됨.
  • 예시 적용: 나머지 배열이 1 0 0 1 0일 때, 나머지가 1인 인덱스 2개 중 2개를 선택하는2C_2 조합을 통해 구간 합이 M의 배수인 사례 1개를 즉시 도출함.

 

3. 설계 통찰: 기록(Array) vs 통계(Variable)

문제의 요구사항에 따른 데이터 관리 전략의 차이를 습득함.

구분 기록 중심 (Array) 통계 중심 (Variable)
관리 방식 S[N] 배열에 전체 누적 합 저장 currentSum 변수 하나로 합산 유지
사용 사례 다중 쿼리: 임의의 구간 합을 반복적으로 구해야 할 때 전체 개수: 특정 조건을 만족하는 구간의 총합만 필요할 때
장점 임의의 구간 합을 O(1)에 즉시 계산 가능 메모리 사용량을 O(N)에서 O(M) 수준으로 최적화 가능
  • 결론: 해당 문제는 조건 만족 구간의 '개수'만 구하면 되므로, currentSum 변수와 나머지 빈도를 체크할 D[M] 배열만으로 충분히 구현 가능함.

 

4. 구현상의 유의점 (Implementation Wisdom)

  • 오버플로우 방지: 데이터 N=100만 기준, 가능한 구간의 쌍은 약 10^{11}개임. 이는 int 범위를 초과하므로 결과값 변수는 반드시 long 타입을 사용함.
  • Java 실행 효율성: O(N) 로직 적용 시 472ms(0.472초) 소요. 1초 제한 환경에서 Java를 이용한 대용량 데이터 처리의 안정성을 확인 시킴.
  • 나머지 0 처리: 누적 합 나머지 자체가 0인 경우, 그 자체로 조건에 부합하는 구간이므로 별도의 카운팅(count++) 혹은 S[0]=0의 가상 지점 처리가 필수적임.

 

5. 향후 확장 개념 (Next Step)

  • 2차원 구간 합: 1차원 배열을 확장한 행렬 영역의 누적 합 계산(O(1)) 학습 필요 (예: BOJ 11660).
  • 슬라이딩 윈도우: 구간의 길이가 고정된 특수 상황에서의 최적화 기법과 구간 합의 차이점 비교 분석.
  • 세그먼트 트리: 데이터의 실시간 업데이트가 발생하는 환경에서의 구간 합 도출(O(\log N)) 자료구조 학습.
  • Sparse Table: 구간 합이 아닌 구간 내 최솟값/최댓값(RMQ)을 빠르게 구하기 위한 희소 배열 활용법 고민.
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Do it! 알고리즘 코딩 테스트 자바] 슬라이딩 윈도우와 Deque - 백준 11003(5일차)  (0) 2026.02.27
[Do it! 알고리즘 코딩 테스트 자바] 투 포인터 - 백준 2018, 1940, 1253번 (4일차)  (1) 2026.02.27
[Do it! 알고리즘 코딩 테스트 자바] 시간복잡도/디버깅/오답 유형(1~2일차)  (0) 2026.02.25
[Android] JetPack Compose Compose 단계/앱개발자가 화면이 그려지는 과정을 알아야 하는 이유  (0) 2025.06.25
[Android] JetPack Compose ViewModel이 필수적인 이유/UI에 상태 관리하면 생기는 문제  (1) 2025.06.24
'Java' 카테고리의 다른 글
  • [Do it! 알고리즘 코딩 테스트 자바] 슬라이딩 윈도우와 Deque - 백준 11003(5일차)
  • [Do it! 알고리즘 코딩 테스트 자바] 투 포인터 - 백준 2018, 1940, 1253번 (4일차)
  • [Do it! 알고리즘 코딩 테스트 자바] 시간복잡도/디버깅/오답 유형(1~2일차)
  • [Android] JetPack Compose Compose 단계/앱개발자가 화면이 그려지는 과정을 알아야 하는 이유
미우딩
미우딩
다양한 프로그래밍 언어를 공부하고 있는 공대생입니다! Python, Java, C언어를 주로 공부하고 있으며 Figma를 통한 디자인도 종종 올릴 예정입니다.
  • 미우딩
    미우의 코딩 기록
    미우딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Java (47)
      • C언어 (0)
      • 대외활동 (5)
      • Spring (4)
      • 프로젝트 (2)
      • 앱개발 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IT #알고리즘 #코딩테스트 #퀵정렬 #오름차순정렬
    android #java #kotlin #상태관리
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #아스키코드
    IT #코딩테스트 #알고리즘 #버블정렬 #오름차순
    Spring #정적컨텐츠 #MVC #템플릿엔진 #API #애너테이션
    IT #알고리즘 #코딩테스트 #삽입정렬 #오름차순정렬
    IT #알고리즘 #코딩테스트 #우선순위큐 #힙 #절댓값 #오름차순 #정렬
    android #java #kotlin #compose
    java #android #개발자
    IT #코딩테스트 #이진탐색 #알고리즘
    BufferedReader
    IT #백준 #코딩테스트 #알고리즘 #구간합 #반복문
    IT #큐 #알고리즘 #코딩테스트 #자바 #선입선출
    IT #알고리즘 #코딩테스트 #선택정렬 #내림차순정렬 #최댓값
    IT #코딩테스트 #알고리즘 #스택 #
    IT #코딩테스트 #알고리즘 #백준 #투포인터 #배열
    IT #BFS #코딩테스트 #구현 #큐 #재귀함수
    IT #코딩테스트 #알고리즘 #투포인터 #시간제한 #Scanner #BufferedReader #StringTokenizer
    IT #알고리즘 #코딩테스트 #DFS
    push #pop #StringBuffer
    IT #알고리즘 #그리디알고리즘 #탐욕알고리즘 #코테
    IT #코딩테스트 #알고리즘 #DFS #재귀함수 #무방향그래프
    IT #백준 #알고리즘 #코딩테스트 #배열 #형변환 #평균구하기
    IT #코딩테스트 #알고리즘 #슬라이딩윈도우 #투포인터 #함수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
미우딩
[Do it! 알고리즘 코딩 테스트 자바] 백준 10986나머지 합- 구간합/나머지 연산의 활용(3일차)
상단으로

티스토리툴바