본문 바로가기
PROGRAMMING CODE/PYTHON

[BAEKJOON] No.10986 Python

by daye_ 2023. 1. 25.

 

나머지 합

 

10986번: 나머지 합

수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j)

www.acmicpc.net

 

 

 

 

처음으로 짠 코드.

순서쌍만을 생각해서 하나씩 접근했다.

 

import sys

N,M = map(int,input().split())
N_list = list(map(int,input().split()))

print(N_list)

rst = 0

for i in range(N) :
  for j in range(i,N) :
    print("\n[",i,",",j,"]")
    sum=0
    for k in range (i,j+1) :
      print("N_list[",k,"] = ",N_list[k])
      sum += N_list[k]
    print("sum = ",sum)
    if (sum!=0)and(sum%M==0) : 
        print("**** find num ****\n")
        sum = 0
        rst+=1

     
pprint("\n결과 : ",rst)
5
3
1 2 3 1 2
[1, 2, 3, 1, 2]

[ 0 , 0 ]
N_list[ 0 ] =  1
sum =  1

[ 0 , 1 ]
N_list[ 0 ] =  1
N_list[ 1 ] =  2
sum =  3
**** find num ****


[ 0 , 2 ]
N_list[ 0 ] =  1
N_list[ 1 ] =  2
N_list[ 2 ] =  3
sum =  6
**** find num ****


[ 0 , 3 ]
N_list[ 0 ] =  1
N_list[ 1 ] =  2
N_list[ 2 ] =  3
N_list[ 3 ] =  1
sum =  7

[ 0 , 4 ]
N_list[ 0 ] =  1
N_list[ 1 ] =  2
N_list[ 2 ] =  3
N_list[ 3 ] =  1
N_list[ 4 ] =  2
sum =  9
**** find num ****


[ 1 , 1 ]
N_list[ 1 ] =  2
sum =  2

[ 1 , 2 ]
N_list[ 1 ] =  2
N_list[ 2 ] =  3
sum =  5

[ 1 , 3 ]
N_list[ 1 ] =  2
N_list[ 2 ] =  3
N_list[ 3 ] =  1
sum =  6
**** find num ****


[ 1 , 4 ]
N_list[ 1 ] =  2
N_list[ 2 ] =  3
N_list[ 3 ] =  1
N_list[ 4 ] =  2
sum =  8

[ 2 , 2 ]
N_list[ 2 ] =  3
sum =  3
**** find num ****


[ 2 , 3 ]
N_list[ 2 ] =  3
N_list[ 3 ] =  1
sum =  4

[ 2 , 4 ]
N_list[ 2 ] =  3
N_list[ 3 ] =  1
N_list[ 4 ] =  2
sum =  6
**** find num ****


[ 3 , 3 ]
N_list[ 3 ] =  1
sum =  1

[ 3 , 4 ]
N_list[ 3 ] =  1
N_list[ 4 ] =  2
sum =  3
**** find num ****


[ 4 , 4 ]
N_list[ 4 ] =  2
sum =  2

결과 :  7

 

답은 잘 나오지만 시간초과.

 

 

 

 

https://smhope.tistory.com/380

 

144. 10986(나머지 합) - 파이썬

import sys input = sys.stdin.readline N,M= map(int, input().split()) num = list(map(int, input().split())) sum = 0 numRemainder = [0] * M for i in range(N): sum += num[i] numRemainder[sum % M] += 1 result = numRemainder[0] for i in numRemainder: result +=

smhope.tistory.com

참고자료

import sys
input = sys.stdin.readline

N,M= map(int, input().split())
num = list(map(int, input().split()))
sum = 0
numRemainder = [0] * M

for i in range(N):
  sum += num[i]
  numRemainder[sum % M] += 1

result = numRemainder[0]

for i in numRemainder:
  result += i*(i-1)//2
  
print(result)

파이썬으로 첫 문제 풀어봐서 좀 헷갈린다.

'PROGRAMMING CODE > PYTHON' 카테고리의 다른 글

[BAEKJOON] No.2914 Python  (0) 2023.02.06
[BAEKJOON] No.10699 Python  (0) 2023.01.27
[BAEKJOON] No.2163 Python  (0) 2023.01.27
[BAEKJOON] No.3046 Python  (0) 2023.01.27
PYTHON DOWNLODE _ macOS  (0) 2021.10.14