Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 11660. ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

deo2kim 2020. 8. 23. 08:55
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  1. S1 | DP
  2. (0,0) ๋ถ€ํ„ฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์ง€์ ๊นŒ์ง€ ๊ฐ๊ฐ์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.
  3. 2๋ฒˆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  4. ํ•ฉ์„ ๋ˆ„์ ํ•œ ๋ฆฌ์ŠคํŠธ๋กœ ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์˜์—ญ์„ ๊ตฌํ•˜๊ณ  ํ•„์š”์—†๋Š” ๋ถ€๋ถ„์€ ๋นผ์ฃผ๋ฉด ๋œ๋‹ค.
  5.  ์—ฌ๊ธฐ์„œ ๋งŽ์ด ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฌธ์ œ๋Š” 1,1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” 0,0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
    ๋˜, ๋นผ์ค˜์•ผํ•˜๋Š” ์˜์—ญ(๋นจ๊ฐ„์ƒ‰) ๋ถ€๋ถ„์€ ๋‘๋ฒˆ ๋นผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋”ํ•ด์ค„ ์˜์—ญ(์ดˆ๋ก์ƒ‰)์„ ํ•œ๋ฒˆ ๋”ํ•ด์ค€๋‹ค.
  6. ์—ฌ๊ธฐ์„œ ๋์ด ์•„๋‹ˆ๋‹ค. x์ถ•์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ธ๊ฒฝ์šฐ์™€ y์ถ•์ด ์ฒ˜์Œ๋ถ€ํ„ฐ์ธ ๊ฒฝ์šฐ, ๋‘˜ ๋‹ค ์•„๋‹Œ๊ฒฝ์šฐ ์ด 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ ์„œ ํ’€์–ด์ค˜์•ผํ•œ๋‹ค.

 

 

 

๐Ÿ’จ ์‹œ๊ฐ„์ดˆ๊ณผ ๋•Œ๋ฌธ์— ํž˜๋“ค์—ˆ๋˜ ๋ฌธ์ œ...

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

import sys
from itertools import accumulate  # ๋ˆ„์  ํ•ฉ์„ ๊ตฌํ•ด์ฃผ๋Š” ๋‚ด์žฅํ•จ์ˆ˜

if __name__ == "__main__":
    N, M = map(int, input().split())
    numbers = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]

    # 0,0 ๋ถ€ํ„ฐ n1,n2๊นŒ์ง€ ๊ฐ๊ฐ์˜ ํ•ฉ์„ ๋ฏธ๋ฆฌ ๊ตฌํ•ด๋†“๊ธฐ
    for i in range(N):
        numbers[i] = list(accumulate(numbers[i]))
    for i in range(1, N):
        for j in range(N):
            numbers[i][j] += numbers[i-1][j]
    print()
    for row in numbers:
        print(row)

    orders = [list(map(int, sys.stdin.readline().split())) for _ in range(M)]
    for x1, y1, x2, y2 in orders:
        all = numbers[x2-1][y2-1]  # ์ „์ฒด

        if x1 == 1 and y1 == 1:
            print(all)
            continue

        minus2 = numbers[x2 - 1][y1 - 2]  # ๋บ„๋ถ€๋ถ„ 1
        minus1 = numbers[x1 - 2][y2 - 1]  # ๋บ„๋ถ€๋ถ„ 2
        if x1 == 1:
            print(all-minus2)
        elif y1 == 1:
            print(all-minus1)
        else:
            plus = numbers[x1 - 2][y1 - 2]  # ์ค‘๋ณต์œผ๋กœ ๋นผ์„œ ๋‹ค์‹œ ๋”ํ•ด์•ผ๋  ๋ถ€๋ถ„
            print(all-minus1-minus2+plus)

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/11660

 

11660๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค

www.acmicpc.net




๋ฌธ์ œ

N×N๊ฐœ์˜ ์ˆ˜๊ฐ€ N×N ํฌ๊ธฐ์˜ ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋‹ค. (x1, y1)๋ถ€ํ„ฐ (x2, y2)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. (x, y)๋Š” xํ–‰ y์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, N = 4์ด๊ณ , ํ‘œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7

์—ฌ๊ธฐ์„œ (2, 2)๋ถ€ํ„ฐ (3, 4)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋ฉด 3+4+5+4+5+6 = 27์ด๊ณ , (4, 4)๋ถ€ํ„ฐ (4, 4)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋ฉด 7์ด๋‹ค.

ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜์™€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค ๊ฐœ์˜ ์ •์ˆ˜ x1, y1, x2, y2 ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, (x1, y1)๋ถ€ํ„ฐ (x2, y2)์˜ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. (x1 ≤ x2, y1 ≤ y2)

์ถœ๋ ฅ

์ด M์ค„์— ๊ฑธ์ณ (x1, y1)๋ถ€ํ„ฐ (x2, y2)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•