ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 2143 ๋‘ ๋ฐฐ์—ด์˜ ํ•ฉ with Python
    PS 2021. 10. 12. 00:00
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 2143 ๋‘ ๋ฐฐ์—ด์˜ ํ•ฉ

    ๐Ÿ’ก ์กฐ๊ฑด ๋ฐ ํ’€์ด

    1. (-1,000,000,000 โ‰ค T โ‰ค 1,000,000,000)
    2. (1 โ‰ค n โ‰ค 1,000)
    3. (1 โ‰ค m โ‰ค 1,000)
    4. ๋ˆ„์ ํ•ฉ ์œ ํ˜•์˜ ๋ฌธ์ œ
    5. ๋‘ ๋ฐฐ์—ด์˜ ๋ถ€๋ถ„๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ฉ์„ ๊ตฌํ•ด T๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin, setrecursionlimit
    
    setrecursionlimit(int(1e9))
    
    t = int(stdin.readline())
    n = int(stdin.readline())
    A = list(map(int, stdin.readline().split()))
    
    m = int(stdin.readline())
    B = list(map(int, stdin.readline().split()))
    
    Asum = {}
    for i in range(n):
        for j in range(i, n):
            k = sum(A[i:j + 1])
            if k in Asum:
                Asum[k] += 1
            else:
                Asum[k] = 1
    
    Bsum = {}
    for i in range(m):
        for j in range(i, m):
            k = sum(B[i:j + 1])
            if k in Bsum:
                Bsum[k] += 1
            else:
                Bsum[k] = 1
    
    res = 0
    
    for key in Asum.keys():
        if (t - key) in Bsum:
            res += Bsum[t - key] * Asum[key]
    
    print(res)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    5
    4
    1 3 1 2
    3
    1 3 2

    ์‹คํ–‰๊ฒฐ๊ณผ

    7

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. A ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ๋“ค๊ณผ B ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ๋“ค์„ ๋”ํ•ด T๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
    2. ๋‘ ๋ฐฐ์—ด์„ ๊ฐ ๊ตฌ๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” ๋ˆ„์ ํ•ฉ์„ ๊ฐ๊ฐ์˜ dict ์ž๋ฃŒ๊ตฌ์กฐ์— ๋„ฃ๊ณ , ์ค‘๋ณต๋˜์–ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ +1 ์„ ํ•ด์ค€๋‹ค.
    3. A ๋ฐฐ์—ด์˜ ํ‚ค ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ
      ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” t ๊ฐ’์—์„œ A ๋ฐฐ์—ด์˜ ํ‚ค ๊ฐ’์„ ๋นผ์ค€ ๊ฐ’์ด B๋ฐฐ์—ด์˜ ํ‚ค๊ฐ’์œผ๋กœ ์žˆ๋‹ค๋ฉด,
      res์— ํ•ด๋‹น B๋ฐฐ์—ด์˜ ๊ฐ’๊ณผ A๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ณฑํ•˜์—ฌ ๋”ํ•ด์ค€๋‹ค.
      for key in Asum.keys():
       if (t - key) in Bsum:
           res += Bsum[t - key] * Asum[key]

    ๐Ÿ’พ ๋Š๋‚€์ 

    • ์ฒ˜์Œ์— ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ค๋ฅด์ง€์•Š์•„ ํž˜๋“ค์–ดํ–ˆ๋‹ค.
    • ์ˆ˜ํ•™, DP๊ฐ€ ์ œ์ผ ์•ฝํ•œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.
    • Dict ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ข‹์•„ํ•˜๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์„ ํ•ด๋ด์„œ ๋” ์ข‹์•˜๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.