[Python] 백준 14929 - 귀찮아(SIB) 문제 풀이
Overview
BOJ 14929번 귀찮아 (SIB) Python 문제 풀이
분류: Prefix Sum (누적합)
문제 페이지
https://www.acmicpc.net/problem/14929
백트래킹으로 모든 경우를 더해나가면 시간초과가 발생한다.
풀이 코드 1
from sys import stdin
def main():
    def input():
        return stdin.readline().rstrip()
    n = int(input())
    nums = list(map(int, input().split()))
    prefix_sum = 0
    res = 0
    for i in range(len(nums) - 1, 0, -1):
        prefix_sum += nums[i]
        res += nums[i - 1] * prefix_sum
    print(res)
if __name__ == "__main__":
    main()
문제에서 주어진 식은 분배법칙을 이용하여 다음과 같이 나타낼 수 있다.

따라서 주어진 숫자들에서 거꾸로 누적합을 구하면 답을 구할 수 있다.
풀이 코드 2
from sys import stdin
def main():
    def input():
        return stdin.readline().rstrip()
    n = int(input())
    nums = list(map(int, input().split()))
    prefix_sum = 0
    res = 0
    for i in range(len(nums) - 1):
        prefix_sum += nums[i]
        res += nums[i + 1] * prefix_sum
    print(res)
if __name__ == "__main__":
    main()
    
이전 풀이에서 굳이 거꾸로 누적합을 구할 필요는 없다. 다음과 같이 조건 식을 변형할 수 있기 때문이다.

식에서 각 원소는 동일한 개수만큼 사용되므로 순차적으로 누적합을 구하며 답을 구할 수 있다.
Author And Source
이 문제에 관하여([Python] 백준 14929 - 귀찮아(SIB) 문제 풀이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@boorook/Python-백준-14929-귀찮아-SIB-문제-풀이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)