소스 코드

import sys
input = sys.stdin.readline
# n 수의 개수, m 변경이 일어나는 횟수, k 구간의 합을 구하는 횟수
n,m,k = map(int,input().split())
# 현재 값들의 정보 저장
board = [0 for _ in range(n+1)]
# n번째까지 값들의 합 정보를 저장
sum_board = [0 for _ in range(n+1)]
# 변경되는 값의 idx를 저장
# set써서 중복 제거
num_board = set()

# for문 돌면서 board, sum_board 완성
for q in range(1,n+1):
    num = int(input())
    board[q] = num
    sum_board[q] = sum_board[q-1] + num

# 입력받는 값에 따라 값 변경 or 합 출력
for w in range(m+k):
    a,b,c = map(int,input().split())
    # a가 1인 경우
    if a == 1:
        # board의 값 변경
        board[b] = c
        # num_board에 몇 번째 값이 변경되었는지 저장
        num_board.add(b)
    else:
        # c번째까지의 합 - b-1번째 까지의 합 = b ~ c까지의 합
        tmp = sum_board[c] - sum_board[b-1]
        # num_board에서 몇 번째 값이 변경되었는지 찾아서
        for e in num_board:
            # 해당 범위 밖에 존재하는 값은 b ~ c까지의 합에 영향 X
            # tmp를 만드는 데 사용된 값(sum_board[e] - sum_board[e-1])을 빼주고
            # 새로운 값(board[e])를 더해준다
            if b <= e <= c:
                tmp = tmp - (sum_board[e] - sum_board[e-1]) + board[e]

        print(tmp)

 


해결 방법

1. pypy 사용

2. num_board에 set을 중복되는 경우를 피함


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.