이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

[골드 3] 백준 3673 - 나눌 수 있는 부분 수열 (파이썬)

포렌식 & 개발 이야기 - Forensics & Development

[골드 3] 백준 3673 - 나눌 수 있는 부분 수열 (파이썬)

  • 2025.04.29 13:51
  • Programming/백준
글 작성자: pental

https://www.acmicpc.net/problem/3673

풀이

  • 길이 N인 수열이 있을 떄,
  • 부분 수열의 합이 D로 나누어 떨어지는 경우의 수를 구해라

누접합 배열을 만들어서, 누적합을 D로 나눈 나머지를 활용하면 풀이가 가능하다.

T = int(input())
for _ in range(T):
D, N = map(int, input().split())
A = list(map(int, input().split()))
psum = [0] * N
psum[0] = A[0]
for i in range(1, N):
psum[i] = psum[i-1] + A[i]

누적 합 계산을 진행한다.

테스트 케이스 T개 만큼 반복하면서, 각 테스트 케이스마다 나누는 수 D와 배열 크기 N을 입력 받고, 배열 A를 입력받는다.

그 다음 psum[i] = 0 ~ i 까지 합을 계산해서 저장한다.

answer = 0
count = {}
count[0] = 1

답을 담을 answer를 0으로 초기화하고, 나머지를 키로, 나머지가 몇번 나왔는지 저장하는 count 딕셔너리를 선언한다.

왜 카운트 0은 1로 초기화를 하는가? → 처음부터 psum[i]자체가 D로 나누어 떨어지는 경우를 바로 세기 위해서이다.

for i in range(N):
if psum[i] % D not in count:
count[psum[i] % D] = 0
answer += count[psum[i] % D]
count[psum[i] % D] += 1
print(answer)

배열을 순회하면서, 각 psum[i]에 대해, psum[i] % D를 구하고, 해당 나머지가 count에 없으면 0으로 초기화 한다.

지금까지 같은 나머지를 가진 누적합이 몇번 나왔는지를 answer에 더하고 출력한다.

전체 요약의 흐름은 다으모가 같다.

1. 입력 받고
2. 누적합 배열 만든 다음
3. 누적합을 D로 나눈 나머지를 기준으로 개수 세서
4. 같은 나머지가 있을 때마다 답을 올린다

코드

# 백준 3673 - 나눌 수 있는 부분 수열
# 분류 : 누적 합
T = int(input())
for _ in range(T) :
D, N = map(int, input().split())
A = list(map(int, input().split()))
psum = [0] * N
psum[0] = A[0]
for i in range(1, N) :
psum[i] = psum[i - 1] + A[i]
answer = 0
count = {}
count[0] = 1 # psum[i] % D == 0 0~i
for i in range(N) :
if psum[i] % D not in count :
count[psum[i] % D] = 0
answer += count[psum[i] % D]
count[psum[i] % D] += 1
print(answer)
이 글은 (새창열림) 본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리

'Programming > 백준' 카테고리의 다른 글

[실버 1] 백준 3184 - 양 (파이썬)  (0) 2025.04.29
[실버 3] 백준 28353 - 고양이 카페 (파이썬)  (1) 2025.04.29
[골드 2] 백준 2637 - 장난감 조립 (파이썬)  (0) 2025.04.28
[골드 5] 백준 12865 - 평범한 배낭 (파이썬)  (1) 2025.04.28
[골드 5] 백준 15681 - 트리와 쿼리 (파이썬)  (0) 2025.04.28

댓글

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [실버 1] 백준 3184 - 양 (파이썬)

    [실버 1] 백준 3184 - 양 (파이썬)

    2025.04.29
  • [실버 3] 백준 28353 - 고양이 카페 (파이썬)

    [실버 3] 백준 28353 - 고양이 카페 (파이썬)

    2025.04.29
  • [골드 2] 백준 2637 - 장난감 조립 (파이썬)

    [골드 2] 백준 2637 - 장난감 조립 (파이썬)

    2025.04.28
  • [골드 5] 백준 12865 - 평범한 배낭 (파이썬)

    [골드 5] 백준 12865 - 평범한 배낭 (파이썬)

    2025.04.28
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • Category (447)
    • Forensics (104)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (23)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (256)
      • C (10)
      • Python (11)
      • 백준 (202)
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

인기 글

공지사항

태그

  • axiom
  • 포렌식
  • 디지털포렌식
  • pental
  • 파이썬
  • 프로그래머스
  • 백준
  • Forensics
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.