ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2012 λ“±μˆ˜ 맀기기 with Python
    PS 2022. 3. 31. 04:13
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2012 λ“±μˆ˜ 맀기기

    πŸ’‘ 쑰건

    1. 2007λ…„ KOI에 Nλͺ…μ˜ 학생듀이 μ°Έκ°€ν•˜μ˜€λ‹€. λͺ¨λ“  학생듀은 μžμ‹ μ΄ Nλͺ… μ€‘μ—μ„œ λͺ‡ 등을 ν•  것인지 μ˜ˆμƒ λ“±μˆ˜λ₯Ό μ μ–΄μ„œ μ œμΆœν•˜λ„λ‘ ν•˜μ˜€λ‹€.

    2. 1λ“±λΆ€ν„° Nλ“±κΉŒμ§€ 동석차 없이 λ“±μˆ˜λ₯Ό λ§€κ²¨μ•Όν•œλ‹€. μ œμΆœν•œ μ˜ˆμƒ λ“±μˆ˜λ₯Ό λ°”νƒ•μœΌλ‘œ μž„μ˜λ‘œ λ“±μˆ˜λ₯Ό 맀기기둜 ν–ˆλ‹€.

    3. μžμ‹ μ˜ λ“±μˆ˜λ₯Ό Aλ“±μœΌλ‘œ μ˜ˆμƒν•˜μ˜€λŠ”λ° μ‹€μ œ λ“±μˆ˜κ°€ B등이 될 경우, 이 μ‚¬λžŒμ˜ λΆˆλ§Œλ„λŠ” A와 B의 차이 (|A - B|)둜 μˆ˜μΉ˜ν™”ν•  수 μžˆλ‹€.

    4. 당신은 Nλͺ…μ˜ μ‚¬λžŒλ“€μ˜ λΆˆλ§Œλ„μ˜ 총 합을 μ΅œμ†Œλ‘œ ν•˜λ©΄μ„œ, ν•™μƒλ“€μ˜ λ“±μˆ˜λ₯Ό 맀기렀고 ν•œλ‹€.

    5. μžμ—°μˆ˜ N이 주어진닀. (1 ≀ N ≀ 500,000) λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 각 μ‚¬λžŒμ˜ μ˜ˆμƒ λ“±μˆ˜κ°€ μˆœμ„œλŒ€λ‘œ 주어진닀.
      μ˜ˆμƒ λ“±μˆ˜λŠ” 500,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

    6. κ·Έλ¦¬λ””μ•Œκ³ λ¦¬μ¦˜, μ •λ ¬ μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n = int(stdin.readline())
    s = []
    for i in range(n):
        s.append(int(stdin.readline()))
    
    s.sort()
    ans = 0
    for i in range(1, n + 1):
        ans += abs(i - s[i - 1])
    print(ans)

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

    예제

    5
    1
    5
    3
    1
    2

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

    3

    ⌨️ 문제 풀이

    1. μ˜ˆμƒ λ“±μˆ˜λ₯Ό μž…λ ₯λ°›μ•„ μ°¨λ‘€λŒ€λ‘œ list s 에 μ €μž₯ν•œλ‹€.

    2. list s λ₯Ό μ •λ ¬ ν•œ λ’€, ans λ³€μˆ˜λ₯Ό 0으둜 μ΄ˆκΈ°ν™” ν•˜κ³ , 1λΆ€ν„° n + 1κΉŒμ§€ μˆœνšŒν•˜λ©΄μ„œ μ˜ˆμƒλ“±μˆ˜μ— ν•΄λ‹Ήν•˜λŠ”
      λΆˆλ§Œλ„λ₯Ό κ³„μ‚°ν•˜μ—¬ ans에 μ €μž₯ν•΄μ€€λ‹€.

    3. ansλ₯Ό 좜λ ₯ν•œλ‹€.

    4. λΆˆλ§Œλ„λ₯Ό μ •λ ¬ν•˜μ—¬ μ‹€μ œ λ“±μˆ˜μ™€ λΉ„κ΅ν•˜μ—¬ 계산을 ν•˜λ©΄ μ΅œμ†Ÿκ°’μ„ ꡬ할 수 μžˆλ‹€.

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

    1. μ •λ ¬ν•˜μ—¬ 문제λ₯Ό ν‘ΈλŠ” κ°„λ‹¨ν•œ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
    2. κ³¨λ“œ 5 λ‚œμ΄λ„ μ •λ„μ˜ 그리디에 μ·¨μ•½ν•œ λͺ¨μŠ΅μ„ λ³΄μ΄λŠ” 것 κ°™μ•„ μ—°μŠ΅μ΄ 많이 ν•„μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.