ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 13900 μˆœμ„œμŒμ˜ 곱의 ν•© with Python
    PS 2021. 12. 13. 20:57
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 13900 μˆœμ„œμŒμ˜ 곱의 ν•©

    πŸ’‘ 쑰건

    1. N개의 μ •μˆ˜ 쀑 μ„œλ‘œ λ‹€λ₯Έ μœ„μΉ˜μ˜ 두 수λ₯Ό λ½‘λŠ” λͺ¨λ“  경우의 두 수의 곱을 κ΅¬ν•˜λΌ.

    2. (2 ≀ N ≀ 100,000)
      N개의 μ •μˆ˜λŠ” (0 <= x <= 100000)

    3. μˆ˜ν•™ μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    n = int(stdin.readline())
    a = list(map(int, stdin.readline().split()))
    r, s = 0, sum(a)
    
    for i in range(n):
        r += a[i] * (s - a[i])
    
    print(r // 2)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    3
    2 3 4

    μ‹€ν–‰κ²°κ³Ό

    26

    ⌨️ 문제 풀이

    1. 숫자의 개수 N을 μž…λ ₯ λ°›κ³ , N개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ list 에 μ €μž₯ν•œλ‹€.
      κ²°κ³Όλ₯Ό 좜λ ₯ν•  r μ΄λΌλŠ” λ³€μˆ˜λ₯Ό μƒμ„±ν•˜κ³ , N개의 μ •μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ μ €μž₯ν•œ listλ₯Ό sum() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄
      s에 μ €μž₯ν•œλ‹€.

    2. μˆœμ„œμŒμ˜ 곱은 μ•„λž˜μ™€ 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. λ§Œμ•½ a, b, c, d의 μˆ«μžκ°€ μžˆλ‹€κ³  κ°€μ •ν•œλ‹€λ©΄
      a * b + a * c + a * d둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€. μ‰½κ²Œ ν‘œν˜„ν•˜μžλ©΄, ab + ac + ad 둜 ν‘œν˜„ν•  수 μžˆλ‹€.

    3. 2λ²ˆμ—μ„œ ν‘œν˜„ν•œ 식을 결합법칙을 톡해 λ¬Άμ–΄μ£Όκ²Œ λœλ‹€λ©΄ μ•„λž˜μ™€ 같이 λ³€ν•œλ‹€.
      a(b+c+d)

    4. μ—¬κΈ°μ„œ (b+c+d) λŠ” s-a[i]라고 ν•  수 μžˆλ‹€.
      κ·Έλž˜μ„œ κ²°κ΅­ 식은 a[i] * (s - a[i]) κ³Ό κ°™μœΌλ©°, r에 μ­‰ 더해쀀닀.

    5. μ—¬κΈ°μ„œ, abλŠ” ba와 같은데 ν‘œν˜„μ€ μ €λ ‡κ²Œ ν•  수 μžˆλ‹€λŠ” 것을 κΈ°μ–΅ν•΄μ•Όν•œλ‹€.
      κ·ΈλŸ¬λ―€λ‘œ r // 2λ₯Ό 톡해 반으둜 λ‚˜λˆ„μ–΄ μ£Όλ©΄ 닡이 좜λ ₯ 될 수 μžˆλ‹€.

    πŸ’Ύ λŠλ‚€μ 

    1. 결합법칙이 μ€‘μš”ν•©λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.