PS

[λ°±μ€€] 13900 μˆœμ„œμŒμ˜ 곱의 ν•© with Python

ν˜•μ€€_It's 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. 결합법칙이 μ€‘μš”ν•©λ‹ˆλ‹€.
λ°˜μ‘ν˜•