ttoance 2023. 5. 21. 19:19

๋ฌธ์ œ ์ถœ์ฒ˜ 

https://codeforces.com/problemset/problem/1426/D

 

Problem - 1426D - Codeforces

 

codeforces.com

 

ํ’€์ด 

n = int(input())
nums = list(map(int, input().split()))
# print(nums)

acc_sum = [0] * 200001 # ๋ˆ„์ ํ•ฉ ์œ„ํ•œ ๊ณต๊ฐ„ 
sub_acc_map = {}
sub_acc_map[0] = 'exists'  # ํ•ฉ์ด 0 ์ธ ๊ฒƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ดˆ๊ธฐํ™” 

result = 0 

for i in range(n):
    acc_sum[i] = nums[i];
    
    if i > 0 :
        acc_sum[i] = acc_sum[i] + acc_sum[i - 1]
   
    if acc_sum[i] in sub_acc_map :
    # if acc_sum[i] == 0:
        print(i, ' : ' , acc_sum[i], ' - ', sub_acc_map)
        result += 1; 
        sub_acc_map.clear()
        sub_acc_map[acc_sum[i]] = 'exists' 
        
    sub_acc_map[acc_sum[i]] = 'exists' 


print(result)

 

์•„๋ž˜ ์˜ˆ์‹œ์—์„œ, `acc_sum[i] in sub_acc_map :` ์ด ์กฐ๊ฑด์„ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋ฉด, ์ด๋ ‡๊ฒŒ ๋œ๋‹ค. 

4
1 -5 3 2

i = 0 i = 1 i = 2 i = 3
acc_sum = [1]
suc_acc_map = {
0 : exists,
1 : exists
}
acc_sum = [1, -4]
suc_acc_map = {
0 : exists,
1 : exists,
-4 : exists,
}
acc_sum = [1, -4, -1]
suc_acc_map = {
0 : exists,
1 : exists,
-4 : exists,
-1 : exists
}
acc_sum = [1, -4, -1, 1]
suc_acc_map = {
1 : exists
}

 

์ด๋ ‡๊ฒŒ ์™œ ๊ทธ๋Ÿฐ์ง€ ๋ญ”๊ฐ€ ๋‚ด๊ฐ€ ์ดํ•ด ๋ชปํ•˜๋Š” ๊ฒŒ ์žˆ๋Š”๊ฐ€ ์‹ถ์—ˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋ถ€๋ถ„ํ•ฉ์ด 0์ธ๊ฒƒ์„ ๊ตฌํ•˜๊ณ ์ž ํ–ˆ์„๋•Œ, ์“ฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ ๊ฒƒ ๊ฐ™์•˜๋‹ค. 

 

 

https://wikidocs.net/193295

 

๋ฌธ์ œ 2. ํ•ฉ์ด 0์ธ ๋ถ€๋ถ„ ๋ฐฐ์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ์ฐพ์•„๋ผ.

[[TIP(๋ฌธ์ œ ์„ค๋ช…)]] ์ฐธ์กฐ: [Largest subarray with 0 sum](https://practice.geeksforgeeks.org/problems/larg…

wikidocs.net

 

chatgpt๋„ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•œ๋‹ค...

๋ฐ˜์‘ํ˜•