[λ°±μ€€] 1043 거짓말 (python 파이썬)

2022. 7. 9. 01:16·🧩 Problem Solving/[λ°±μ€€]

https://www.acmicpc.net/problem/1043

 

1043번: 거짓말

μ§€λ―Όμ΄λŠ” νŒŒν‹°μ— κ°€μ„œ 이야기 ν•˜λŠ” 것을 μ’‹μ•„ν•œλ‹€. νŒŒν‹°μ— 갈 λ•Œλ§ˆλ‹€, μ§€λ―Όμ΄λŠ” 지민이가 κ°€μž₯ μ’‹μ•„ν•˜λŠ” 이야기λ₯Ό ν•œλ‹€. μ§€λ―Όμ΄λŠ” κ·Έ 이야기λ₯Ό 말할 λ•Œ, μžˆλŠ” κ·ΈλŒ€λ‘œ μ§„μ‹€λ‘œ λ§ν•˜κ±°λ‚˜ μ—„μ²­λ‚˜κ²Œ

www.acmicpc.net


아이디어

1. 반볡문

  • 문제 λŠλ‚Œμ΄ 진싀을 μ•„λŠ” μ‚¬λžŒμ΄ 쒀비같이 κ°μ—Όμ‹œν‚€λŠ” 것이라 생각
  • κ·Έλž˜μ„œ 진싀을 μ•„λŠ” μ‚¬λžŒκ³Ό 같이 μžˆλŠ” μ‚¬λžŒλ“€μ„ 진싀을 μ•„λŠ” μ‚¬λžŒμœΌλ‘œ λ°”κΏ¨λ‹€.
  • 근데 이러면 진싀을 μ•„λŠ” μ‚¬λžŒλ“€μ΄ λ°”λ€Œμ–΄μ„œ 전체 νŒŒν‹°λ₯Ό 또 탐색해야 ν•˜κ³  이λ₯Ό 계속 λ°˜λ³΅ν•΄μ•Ό ν•΄μ„œ μ‹€νŒ¨ν–ˆλ‹€.

2. κ·Έλž˜ν”„

  • κ·ΈλŸ¬λ‹€κ°€ λ™μ‹œμ— ν•œ λ²ˆμ— ν•΄μ•Ό λœλ‹€λŠ” 것을 κΉ¨λ‹«κ³  κ·Έλž˜ν”„λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ κ²°μ •
  • 각 νŒŒν‹°λ§ˆλ‹€ μžˆλŠ” μ‚¬λžŒλ“€μ„ 두 λͺ…μ”© μ–‘λ°©ν–₯으둜 μ΄μ–΄μ£ΌλŠ” 걸둜 κ·Έλž˜ν”„λ₯Ό λ§Œλ“€μ—ˆλ‹€.
  • 그리고 처음 진싀을 μ•„λŠ” μ‚¬λžŒλ“€λ‘œ μ‹œμž‘ν•΄ 탐색을 ν•˜λ©΄ ν•œ λ²ˆμ— 진싀을 μ•„λŠ” μ‚¬λžŒλ“€μ„ λͺ¨λ‘ 찾을 수 μžˆλ‹€.

 

 


전체 μ½”λ“œ

import sys
from collections import deque
from itertools import combinations

N, M = map(int,input().split())
ans = 0
truth_flag = False
party_list = []
who_know_truth = [False] * (N + 1)

know = [int(x) for x in sys.stdin.readline().rstrip().split()]
know_member = know[1:]

for k in know_member:
    who_know_truth[k] = True

graph = [[] for _ in range(N + 1)]

for _ in range(M):
    party = [int(x) for x in sys.stdin.readline().rstrip().split()]
    party_member = party[1:]
    party_list.append(party_member)
    for pair in combinations(party_member,2):
        if not pair[1] in graph[pair[0]]:
            graph[pair[0]].append(pair[1])
        if not pair[0] in graph[pair[1]]:
            graph[pair[1]].append(pair[0])

def bfs(n):

    deq = deque()
    deq.append(n)
    visited[n] = True

    while deq:
        x = deq.popleft()

        for i in graph[x]:
            if not visited[i]:
                who_know_truth[i] = True
                visited[i] = True
                deq.append(i)

for i in know_member:
    visited = [False] * (N + 1)
    bfs(i)

ans = M
for party in party_list:
    for p in party:
        if who_know_truth[p] == True:
            ans -= 1
            break
print(ans)

μ½”λ“œ μ„€λͺ…

who_know_truth = [False] * (N + 1)

know = [int(x) for x in sys.stdin.readline().rstrip().split()]
know_member = know[1:]

for k in know_member:
    who_know_truth[k] = True

μ²˜μŒμ— 진싀을 μ•„λŠ” μ‚¬λžŒλ“€μ„ μ€„λ‘œ μž…λ ₯λ°›μœΌλ©΄ 리슀트 맨 μ•žμ—λŠ” μ‚¬λžŒ 수 μ΄λ―€λ‘œ μŠ¬λΌμ΄μ‹± ν•΄μ€€λ‹€.

그리고 진싀을 μ•„λŠ” μ‚¬λžŒμ˜ λ²ˆν˜ΈλŠ” True둜 ν‘œμ‹œν•΄μ€€λ‹€.

 

graph = [[] for _ in range(N + 1)]

for _ in range(M):
    party = [int(x) for x in sys.stdin.readline().rstrip().split()]
    party_member = party[1:]
    party_list.append(party_member)
    for pair in combinations(party_member,2):
        if not pair[1] in graph[pair[0]]:
            graph[pair[0]].append(pair[1])
        if not pair[0] in graph[pair[1]]:
            graph[pair[1]].append(pair[0])

κ·Έλž˜ν”„ λ§Œλ“œλŠ” νŒŒνŠΈλ‹€.

μ—¬κΈ°μ„œλ„ μŠ¬λΌμ΄μ‹± ν•΄μ£Όκ³  전체 νŒŒν‹° λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•΄λ‘”λ‹€.(λ‚˜μ€‘μ— ν•„μš”)

 

그리고 μ‘°ν•© ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ 2λͺ…μ”© νŽ˜μ–΄λ₯Ό λ§Œλ“€μ–΄ 인접 λ¦¬μŠ€νŠΈμ— μΆ”κ°€ν•΄μ€€λ‹€.

 

 

def bfs(n):

    deq = deque()
    deq.append(n)
    visited[n] = True

    while deq:
        x = deq.popleft()

        for i in graph[x]:
            if not visited[i]:
                who_know_truth[i] = True
                visited[i] = True
                deq.append(i)

for i in know_member:
    visited = [False] * (N + 1)
    bfs(i)

진싀을 μ•„λŠ” μ‚¬λžŒλ“€μ„ κΈ°μ€€μœΌλ‘œ κ·Έλž˜ν”„ 탐색을 ν•΄μ€€λ‹€.

방문을 ν•  λ•Œλ§ˆλ‹€ 진싀을 μ•„λŠ” μ‚¬λžŒμœΌλ‘œ λ°”κΏ”μ€€λ‹€.(False -> True)

 

ans = M
for party in party_list:
    for p in party:
        if who_know_truth[p] == True:
            ans -= 1
            break
print(ans)

그리고 각 νŒŒν‹°λ§ˆλ‹€ 진싀을 μ•„λŠ” μ‚¬λžŒμ΄ ν•œ λͺ…이라도 μ‘΄μž¬ν•˜λ©΄ break ν•˜κ³  νŒŒν‹° μ΄κ°œμˆ˜μ—μ„œ -1 ν•΄μ€€λ‹€.

'🧩 Problem Solving > [λ°±μ€€]' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€] 13913 μˆ¨λ°”κΌ­μ§ˆ 4 (python 파이썬)  (0) 2022.07.10
[λ°±μ€€] 12851 μˆ¨λ°”κΌ­μ§ˆ 2 (python 파이썬)  (0) 2022.07.10
[λ°±μ€€] 2467 μš©μ•‘ (python 파이썬)  (0) 2022.07.09
[λ°±μ€€] 6064 μΉ΄μž‰ 달λ ₯ (python 파이썬)  (0) 2022.07.06
[λ°±μ€€] 11403 경둜찾기 (python 파이썬)  (0) 2022.07.06
'🧩 Problem Solving/[λ°±μ€€]' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€] 13913 μˆ¨λ°”κΌ­μ§ˆ 4 (python 파이썬)
  • [λ°±μ€€] 12851 μˆ¨λ°”κΌ­μ§ˆ 2 (python 파이썬)
  • [λ°±μ€€] 2467 μš©μ•‘ (python 파이썬)
  • [λ°±μ€€] 6064 μΉ΄μž‰ 달λ ₯ (python 파이썬)
μ œλ΄‰μ•„
μ œλ΄‰μ•„
  • μ œλ΄‰μ•„
    Overthinking
    μ œλ΄‰μ•„
    fake it till you make it.
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (104)
      • 🧩 Problem Solving (83)
        • [λ°±μ€€] (74)
        • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] (7)
        • [SW Expert Academy] (1)
        • [μ•Œκ³ λ¦¬μ¦˜ for PS] (1)
      • πŸ“¦ Data Structure (2)
      • πŸ“œ Language (14)
        • [python] (14)
      • πŸ–€ Git (1)
      • πŸŒ† 일상 (2)
        • πŸ’¬ 벽보고 λ§ν•˜κΈ° (2)
      • πŸ—„οΈ 기타 (2)
      • πŸ”΅ css (0)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    그리디
    ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
    λ‹€μ΅μŠ€νŠΈλΌ
    μž¬κ·€
    λ°±μ€€
    Bruteforce
    Python
    slicing
    imos
    μ •μ²˜κΈ°
    SWEA
    boj
    λ°±νŠΈλž˜ν‚Ή
    DP
    μŠ€νƒ
    κ΅¬ν˜„
    νŒ°λ¦°λ“œλ‘¬
    νˆ¬ν¬μΈν„°
    λΆ€λΆ„ν•©
    DFS
    BFS
    ν”Œλ‘œμ΄λ“œ 와샬
    냅색
    브루트포슀
    λΆ„ν•  정볡
    λ°λΈŒμ½”μŠ€
    μœ„μƒμ •λ ¬
    ν”Œλ‘œμ΄λ“œμ›Œμ…œ
    파이썬
    λˆ„μ ν•©
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
μ œλ΄‰μ•„
[λ°±μ€€] 1043 거짓말 (python 파이썬)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”