관리 메뉴

솜씨좋은장씨

[BaekJoon] 11659번 : 구간 합 구하기 4 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 11659번 : 구간 합 구하기 4 (Python)

솜씨좋은장씨 2021. 12. 3. 19:58
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 구간 합 구하기 4 입니다.

 

11659번: 구간 합 구하기 4

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

www.acmicpc.net

👨🏻‍💻 문제 풀이

엄청 쉬워보여서 빨리 풀고 다른 남은 작업을 진행해보려고 했는데

생각보다 시간초과 문제 때문에 너무 오랜 시간 풀었던 문제 입니다.

def get_div_sum_4(numbers, i, j):
    return sum(numbers[i-1:j])

if __name__ == "__main__":
    numbers_len, loop_num = map(int, input().split())
    numbers = list(map(int, input().split()))
    
    for i in range(loop_num):
        i, j = map(int, input().split())
        print(get_div_sum_4(numbers, i, j))

처음에는 입력받은 인덱스 번호를 활용하여 리스트 슬라이싱을 활용 했던 것과

for 반복문을 활용하여 입력받은 수 만큼 수행하는 부분을 구현하였더니 시간 초과가 발생했습니다.

 

이에 itertools의 accumulate를 활용하여 누적합 리스트를 만들어 활용했고

numbers_len, loop_num = map(int, sys.stdin.readline().split())
numbers = list(map(int, sys.stdin.readline().split()))
numbers = list(accumulate(numbers))
numbers.append(0)

for 반복문을 while 반복문을 활용하여 입력 받은 수 만큼 수행하는 부분을 구현하니 해결되었습니다.

break_num = 0
    
while loop_num > break_num:
    i, j = map(int, sys.stdin.readline().split())
    print(get_div_sum_4(numbers, i, j))
    break_num += 1

👨🏻‍💻 코드 ( Solution )

from itertools import accumulate
import sys

def get_div_sum_4(numbers, i, j):
    return numbers[j-1] - numbers[i-2]

if __name__ == "__main__":
    numbers_len, loop_num = map(int, sys.stdin.readline().split())
    numbers = list(map(int, sys.stdin.readline().split()))
    numbers = list(accumulate(numbers))
    numbers.append(0)
    
    break_num = 0
    
    while loop_num > break_num:
        i, j = map(int, sys.stdin.readline().split())
        print(get_div_sum_4(numbers, i, j))
        break_num += 1
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments