EC.CREW 2기 5주차

2022. 11. 27. 02:01개발/🌸 EC.CREW

 

5주차 주제 : <자료 구조 - 구간 합>

 

1. 구간 합 vs 부분 합

 

- 부분 합 : 0 ~ a 까지의 합 ( 처음부터 끝까지 )

- 구간 합 : a ~ b 의 합 ( 일정 구간의 합 )

 

 

2. 구간 합 알고리즘

 

num = [ 1, 2, 3, 4, 5 ] 에서 num[a] ~ num [b]의 합을 구할 때

 - sum[i] = num[0] + num[1] + ...+num[i-1]을 만족시키는 sum을 구한다

    sum = [ 0, 1, 3, 6, 10, 15 ]

- num[a] ~ num[b]의 합은 sum[b+1] - sum[a]를 통해 구할 수 있다

   ex) num[2] ~ num[4] 의 합 = sum[5] - sum[2]

         num[2] + num[3] + num[4] = (num[0]+num[1]+num[2]+num[3]+num[4]) - (num[0]+num[1])

         3 + 4 + 5 = 15 - 3

 

 

 

3. 활용 문제

 

# 1 구간 합 구하기 4

 

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

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

 

 

 

 

 

N,M = map(int,input().split())
num = list(map(int, input().split()))
sumList = []
p_sumList = []

sum = 0
for a in range(int(N)):
    sum+=num[a]
    sumList.append(sum)

for k in range(M):
    i, j = map(int, input().split())
    if i == 1:
        p_sumList.append(sumList[j-1])
    else:
        p_sumList.append(sumList[j-1] - sumList[i-2])

for b in range(len(p_sumList)):
	print(p_sumList[b])

 

 

 

# 2 구간 합 구하기 5

 

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

 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net

 

 

  어떻게 풀 지 대충 머릿속으로는 그려지는데 코드를 어떻게 짜야할 지 감이 안 잡힌다...

  조금만 더 머리 굴리면 될 것 같은데...!! 

 

 

 

 

# 3 나머지 합

 

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

 

10986번: 나머지 합

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

www.acmicpc.net

 

이 문제는 사실 이해하는 데에도 시간이 오래 걸렸다

나중에 재도전...!!

 

 

 

 

 

문제의 난이도가 올라갈수록 예전처럼 알고리즘 따위 생각 안 하고 다중 for문을 써대면서 문제를 푸니까 시간 초과 에러가 나온다.

슬슬 알고리즘을 공부해봐야겠다. 

'개발 > 🌸 EC.CREW' 카테고리의 다른 글

EC.CREW 2기 7주차  (0) 2022.11.28
EC.CREW 2기 6주차  (0) 2022.11.28
EC.CREW 2기 4주차  (0) 2022.11.14
EC.CREW 2기 2차 팀대항전(2) - 아직  (0) 2022.11.13
EC.CREW 2기 2차 팀대항전(1) - 아직  (0) 2022.11.13