백준 알고리즘 11659번(구간합 구하기)
2023. 12. 4. 19:10ㆍ알고리즘
♣ 문제
♣ 문제 풀이 아이디어
이 문제는 리스트의 구간합을 구하는 문제이다. 반복문을 이용해서 특정 구간의 합을 구할 수도 있지만 시간이 오래 걸린다. 구간합 문제는 첫 번째 숫자부터 특정 숫자를 더한 값을 이용하여 해결할 수 있다 .
위의 예시의 경우
5 4 3 2 1
주어진 수를 하나씩 더해서 요소를 구성하면
0 5 9 12 14 15 이다.
첫 번째 숫자 0은 아무것도 더하지 않았을 때, 5는 첫 번째 수인 5만 더했을 때, 두 번째 수인 9는 5와 4를 더했을 때... 이런 식으로 구성된다.
0 = 수를 더하기 전
5 = 첫 번째 수
9 = 첫 번째 수 + 두 번째 수
12 = 첫 번째 수 + 두 번째 수 + 세 번째 수
14 = 첫 번째 수 + 두 번째 수 + 세 번째 수 + 네 번째 수
15 = 첫 번째 수 + 두 번째 수 + 세 번째 수 + 네 번째 수 + 마지막 수
구간합을 구할 때, 예를 들어 2번부터 5번까지의 수를 더한 합을 구하라고 하면
( 첫 번째 수 + 두 번째 수 + 세 번째 수 + 네 번째 수 + 마지막 수) - (첫 번째 수) 를 계산하면 된다.
따라서 0, 5, 9, 12, 14, 15를 리스트에 넣은 후, 구간 i부터 j까지 더한 합을 구하라고 하면 list[j - list[i-1] 을 계산하면 된다.
정답 코드
'알고리즘' 카테고리의 다른 글
그리디 알고리즘(백준 알고리즘 11399) (1) | 2023.12.20 |
---|---|
백준 1541번 잃어버린 괄호 (1) | 2023.12.06 |
백준 1213번(팰린드롬 만들기) (1) | 2023.11.29 |
백준 1072번(이분탐색) python (1) | 2023.11.18 |
백준 1929 (1) | 2023.11.16 |