๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 11441๋ฒˆ : ํ•ฉ ๊ตฌํ•˜๊ธฐ (Python/Silver 3)

devCloud 2023. 3. 22. 20:46
728x90
 

11441๋ฒˆ: ํ•ฉ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000) ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (-1,000 ≤ Ai ≤ 1,000) ์…‹์งธ ์ค„์—๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ 100,000) ๋„ท์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š”

www.acmicpc.net

๋ฌธ์ œ

N๊ฐœ์˜ ์ˆ˜ A1, A2, ..., AN์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด M๊ฐœ์˜ ๊ตฌ๊ฐ„ i, j๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, i๋ฒˆ์งธ ์ˆ˜๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ˆ˜๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000) ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., AN์ด ์ฃผ์–ด์ง„๋‹ค. (-1,000 ≤ Ai ≤ 1,000) ์…‹์งธ ์ค„์—๋Š” ๊ตฌ๊ฐ„์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ 100,000) ๋„ท์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ๊ตฌ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” i์™€ j๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ i ≤ j ≤ N)

 

์ถœ๋ ฅ

์ด M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ตฌ๊ฐ„์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ ์ž…๋ ฅ

5
10 20 30 40 50
5
1 3
2 4
3 5
1 5
4 4

์˜ˆ์ œ ์ถœ๋ ฅ

60
90
120
150
40

๋ฌธ์ œ ์„ค๋ช…

N๊ฐœ์˜ ์ˆ˜๋ฅผ i ~ j๊นŒ์ง€ ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•œ๋‹ค.

 

ํ’€์ด

- ๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ

 

๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

array = [10, 20, 30, 40, 50]
n = len(array)
prefix_sum = [0] * (n + 1)

for i in range(n):
    prefix_sum[i + 1] = prefix_sum[i] + array[i]
   
#๊ฒฐ๊ณผ : prefix_sum[0, 10, 30, 60, 100, 150]

๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช… - https://dev-cloud.tistory.com/141

 

ํŒŒ์ด์ฌ ์ถœ๋ ฅ ์†๋„ ๊ฐœ์„  ๋ฐฉ๋ฒ•

โ€ป  sys.stdout.write( )

  • ์ค„๋ฐ”๊ฟˆ ์—†์ด ๋ฐ”๋กœ ์ด์–ด์„œ ์ถœ๋ ฅ
  • ๋ฉ”๋ชจ๋ฆฌ ํผ / ์†๋„ ๋น ๋ฆ„
  • () ์•ˆ์— ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ ์ •์ˆ˜์ผ ๊ฒฝ์šฐ๋Š” str(์ •์ˆ˜) ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ์ค„๋ฐ”๊ฟˆ ํ•˜๋ฉด์„œ ์—ฐ์† ์ถœ๋ ฅ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋์— +'\n'์„ ๋„ฃ์–ด์ฃผ์ž.

Solution

import sys
input = sys.stdin.readline
N = int(input())
A = list(map(int, input().split()))

prefix_sum = [0] * (N + 1)
for k in range(N):
    prefix_sum[k+1] = prefix_sum[k] + A[k]
    
M = int(input())
ans = 0
for _ in range(M):
    i, j = map(int, input().split())
    ans = prefix_sum[j]-prefix_sum[i-1]
    sys.stdout.write(str(ans) + '\n')

์‹œ๊ฐ„ ์ดˆ๊ณผ ํ’€์ด

#1. ์‹œ๊ฐ„ ์ดˆ๊ณผ ์ƒ๊ฐ ์•ˆ ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ํ’€์ด์ง€๋งŒ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„ ์ดˆ๊ณผ
for _ in range(M):
    i, j = map(int, input().split())
    result = 0
    while i <= j:
        result += A[i-1]
        i += 1
    print(str(result))
    
#2. ์ด์ค‘ for๋ฌธ์€ ๋‹น์—ฐํžˆ O(n^2) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ์ˆ˜ ๋ฐ–์—..
for _ in range(M):
    i, j = map(int, input().split())
    prefix_sum = [0] * (j+1)
    for k in range(i, j+1):
        prefix_sum[k] = prefix_sum[k-1] + A[k-1]
    print(prefix_sum[j])
    
#3. ๋ˆ„์  ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ผ๋Š”๋ฐ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ธธ๋ž˜ ์–ต์šธํ•  ์ง€๊ฒฝ
prefix_sum = [0] * (N + 1)
for k in range(N):
    prefix_sum[k+1] = prefix_sum[k] + A[k]

for _ in range(M):
    i, j = map(int, input().split())
    print(prefix_sum[j]-prefix_sum[i-1])โ€‹

 

728x90