소스 코드
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.백준' 카테고리의 다른 글
[BOJ/백준 코딩] Final Price - PYTHON #28224 (0) | 2023.06.17 |
---|---|
[BOJ/백준 코딩] 오렌지먹은지오랜지 - PYTHON #27962 (0) | 2023.06.11 |
[BOJ/백준 코딩] 과제는 끝나지 않아! - PYTHON #17952 (0) | 2023.06.03 |
[BOJ/백준 코딩] 크로아티아 알파벳 - PYTHON #2941 (0) | 2023.06.02 |
[BOJ/백준 코딩] 도키도키 간식드리미 - PYTHON #12789 (0) | 2023.05.28 |