๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

[๋ฐฑ์ค€/Python] 10986๋ฒˆ ๋‚˜๋จธ์ง€ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€/Python] 10986๋ฒˆ ๋‚˜๋จธ์ง€

์ฅฌ์Šค์ด 2023. 1. 29. 18:10
728x90

1๏ธโƒฃ๋ฌธ์ œ ์„ค๋ช…

์ˆ˜ N๊ฐœ A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ์—ฐ์†๋œ ๋ถ€๋ถ„ ๊ตฌ๊ฐ„์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ฆ‰, Ai + ... + Aj (i ≤ j) ์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” (i, j) ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

2๏ธโƒฃ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 106, 2 ≤ M ≤ 103)

๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ˆ˜ A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ Ai ≤ 109)

3๏ธโƒฃ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ์†๋œ ๋ถ€๋ถ„ ๊ตฌ๊ฐ„์˜ ํ•ฉ์ด M์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป์ž‘์„ฑํ•œ ์ฝ”๋“œ

import sys

input = sys.stdin.readline

n, m = map(int, input().split())	# ์ˆซ์ž ๊ฐœ์ˆ˜, ๋‚˜๋ˆ„๋Š” ์ˆ˜
num = list(map(int, input().split()))	# ์ˆซ์ž ๋ฐ์ดํ„ฐ
S = [0] * n		# ๋ˆ„์ ํ•ฉ
C = [0] * m		# ๊ฐ™์€ ๋‚˜๋จธ์ง€์˜ ์ธ๋ฑ์Šค info
cnt = 0		# m์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜

for i in range(n):
    S[i] = S[i-1] + num[i]
    remainder = S[i] % m
    if remainder == 0:
        cnt += 1
    C[remainder] += 1

for i in range(m):
    if C[i] > 1:
        cnt += (C[i] * (C[i]-1) // 2)

print(cnt)

๐Ÿ’ก์ฝ”๋“œ ์„ค๋ช…

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์•Œ์•„์•ผํ•  ๊ฐœ๋…์€ ' S[ i ] % m์˜ ๊ฐ’๊ณผ S[ j ] % m์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ( S[ i ] - S[ j ] ) % m = 0 ' ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋จธ์ง€ ๊ฐ’์ด ๊ฐ™์„ ๋•Œ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด list C๋ฅผ ์‚ฌ์šฉํ•˜์˜€๊ณ , C[index]๋Š” ๊ฐ™์€ ๋‚˜๋จธ์ง€๋ฅผ ๊ฐ–๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด m์ด 3์ผ ๊ฒฝ์šฐ, C[2]๋Š” ๋‚˜๋จธ์ง€๊ฐ€ 2์ผ ๋•Œ์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

์ฒซ๋ฒˆ์งธ for๋ฌธ์„ ๋ณด๋ฉด,  reminder๋Š” ๋ˆ„์ ํ•ฉ์„ m์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ์˜ ๋‚˜๋จธ์ง€ ๊ฐ’์ด๊ณ  ์ด๋•Œ, remainder๊ฐ€ 0 ์ผ ๋•Œ cnt์˜ ๊ฐ’์„ +1 ํ•ด์ค€๋‹ค. remainder๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ, C[remainder]์˜ ๊ฐ’์— +1 ํ•ด์ค€๋‹ค. 

 

๋‘๋ฒˆ์งธ for๋ฌธ์„ ๋ณด๋ฉด, C[remainder]์˜ ๊ฐ’์ด 2 ์ด์ƒ์ด๋ฉด ' ( S[ i ] - S[ j ] ) % m = 0 '์˜ ๊ฐœ๋…์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์›์†Œ ๊ฐ’์ด ๊ฐ™์€ 2๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ๋ฅผ ์กฐํ•ฉ ๊ณต์‹์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ•œ๋‹ค. cnt์— ๊ตฌํ•œ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.

728x90
Comments