ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 1043 거짓말 with Python
    PS 2021. 10. 20. 22:33
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 1043 거짓말

    πŸ’‘ 쑰건

    1. N, M은 50 μ΄ν•˜μ˜ μžμ—°μˆ˜ 각각 μ‚¬λžŒμ˜ 수, νŒŒν‹°μ˜ 수
      진싀을 μ•„λŠ” μ‚¬λžŒμ˜ μˆ˜λŠ” 0 이상 50 μ΄ν•˜μ˜ μ •μˆ˜
      각 νŒŒν‹°λ§ˆλ‹€ μ˜€λŠ” μ‚¬λžŒμ˜ μˆ˜λŠ” 1 이상 50 μ΄ν•˜μ˜ μ •μˆ˜
    2. μ§€λ―Όμ΄λŠ” λͺ¨λ“  νŒŒν‹°μ— μ°Έκ°€ν•΄μ•Όν•œλ‹€.
      μ§€λ―Όμ΄λŠ” 이야기λ₯Ό κ³Όμž₯되게 ν•œλ‹€. λ˜ν•œ μ§€λ―Όμ΄λŠ” κ±°μ§“λ§μŸμ΄κ°€ 되기 μ‹«λ‹€.
      μ΄μ•ΌκΈ°μ˜ 진싀을 μ•„λŠ” μ‚¬λžŒμ΄ νŒŒν‹°μ— 있으면 κ³Όμž₯ν•΄μ„œ 말할 수 μ—†λ‹€.
    3. κ³Όμž₯된 이야기λ₯Ό ν•  수 μžˆλŠ” νŒŒν‹° 개수의 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” 문제.
    4. 자료ꡬ쑰의 ν™œμš©μ„ μš”κ΅¬ν•˜λŠ” μœ ν˜•μ˜ 문제

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

    from sys import stdin
    
    n, m = map(int, stdin.readline().split())
    trues = set(list(map(int, stdin.readline().split()))[1:])
    party = []
    cnt = []
    
    for _ in range(m):
        data = set(map(int, stdin.readline().split()[1:]))
        if data:
            party.append(data)
            cnt.append(1)
    
    for _ in range(m):
        for i, p in enumerate(party):
            if trues & p:
                cnt[i] = 0
                trues |= p
    
    print(sum(cnt))

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

    예제

    4 5
    1 1
    1 1
    1 2
    1 3
    1 4
    2 4 1

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

    2

    ⌨️ 문제 풀이

    1. cntλΌλŠ” λ¦¬μŠ€νŠΈμ— νŒŒν‹°μ˜ 수만큼 μ›μ†Œλ₯Ό λ§Œλ“€μ–΄μ£Όκ³ , 각 값을 1둜 λ‘”λ‹€.
      μ΄λŠ” νŒŒν‹°μ—μ„œ κ³Όμž₯되게 말을 ν•  수 μžˆλ‹€λŠ” κ°€μ •ν•˜μ— 1둜 λ‘” 것.
      λ˜ν•œ 각 νŒŒν‹°μ˜ ꡬ성원을 party λ¦¬μŠ€νŠΈμ— 각각 집어넣어쀀닀.

    2. νŒŒν‹°μ˜ 수만큼 λ‹€μ‹œ μˆœνšŒν•˜λ©΄μ„œ 각 party의 λ²ˆν˜Έμ™€ ꡬ성원을 뽑아 λ°˜λ³΅λ¬Έμ„ 돌리기 μœ„ν•΄ enumerate λ₯Ό μ‚¬μš©ν•΄μ€€λ‹€.
      enumerate ν•¨μˆ˜λŠ” 리슀트λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 리슀트의 각 μ›μ†Œμ˜ μΈλ±μŠ€μ™€ μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.

    3. νŒŒν‹°μ˜ ꡬ성원과 진싀을 μ•„λŠ” μ‚¬λžŒλ“€κ°„μ— ꡐ집합이 μ‘΄μž¬ν•œλ‹€λ©΄, cnt 리슀트의 ν•΄λ‹Ή λ²ˆν˜Έμ— ν•΄λ‹Ήν•˜λŠ” 값을 0으둜 λ³€κ²½ν•œλ‹€.
      κ·Έ νŒŒν‹°λŠ” μ§„μ‹€λ§Œμ„ 말할 수 μžˆλŠ” νŒŒν‹°λΌλŠ” 것이닀.
      κ·Έ ν›„, νŒŒν‹°μ›μ„ 진싀을 μ•Œκ³  μžˆλŠ” μ‚¬λžŒλ“€μ΄ μ €μž₯λ˜μ–΄ μžˆλŠ” set() μžλ£Œν˜•μ— update μ‹œμΌœμ€€λ‹€.
      update 와 |= 이 λ‘˜μ€ 같은 효과λ₯Ό λ³Ό 수 μžˆλ‹€.

    4. cnt 리슀트의 합을 ꡬ해 좜λ ₯ν•œλ‹€.

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

    1. set μ§‘ν•©μžλ£Œν˜•μ˜ κ°•λ ₯함을 μ•Œ 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.
    2. 문제λ₯Ό 잘 읽고 자료ꡬ쑰λ₯Ό ν™œμš©ν•˜λ©΄ ν’€ 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.
    3. 이 문제λ₯Ό ν•œλ²ˆμ— 풀지 λͺ»ν–ˆλ‹€. 아직 ν™œμš©μ΄ λΆ€μ‘±ν•œ 것 κ°™λ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.