- 1043-python2023년 05월 11일
- 2료일
- 작성자
- 2023.05.11.:56
문제를 해석해보면 각라인에 파티가 있는데 그 중 진실을 아는 사람이 하나라도 있으면 그 파티에서는 지민이는 거짓말쟁이로 판단되어진다. 그래서 생각한것이 Union&find를 떠올렸다. 파티에 잇는 사람들을 노드들로 생각하고 잇고 나서 find를 통해 만약 진실을 아는 사람이 있으면 그 연결한 노드들에서는 거짓말을 하면 안되는 것이다.
import sys input = sys.stdin.readline N,M = map(int,input().split()) peoplelist = list(map(int,input().split()))[1:] uplist = [i for i in range(N+1)] for i in peoplelist: uplist[i] = 0 #정답을 아는놈드은 0으로 def Union(a,b): x,y = find(a),find(b) if(x<y): uplist[y]=x else: uplist[x] = y def find(x): if x == uplist[x]: return x return find(uplist[x]) party = [] for k in range(M): partylist = list(map(int,input().split()))[1:] party.append(partylist) for i in range(len(partylist)-1): Union(partylist[i],partylist[i+1]) ans = 0 for par in party: for i in par: if (find(i)==0): break else: ans+=1 print(ans)
1트 실패. 해설을하자면 진실을 아는 사람들은 uplist의 값을 0으로 초기화 하고 그 이후 파티리스트를 받으며 각 파티 참여인원을 union해주어 선을 이어준다. 파티라는 리스트에 추가해주고 마지막에 이중 포문을 돌면서 각 파티들을 하나씩 꺼내면서 파티에 있는 참여인원중 find해준것이 0이면 break으로 탈출! 아니라면 정답에 +1해주는 코드이다. 그런데 문제가 생겼다. 답이 틀리다. 그 이유를 찾아보니 마지막에서 if(find해주어서 0일경우만 탈출시키고 아니라면 정답에 1을 추가해주었는데 이러면 만약 파티인원이 두명인데 그 두명모두 find가 0이아니라면 각각의 인원이 추가되어버리면서 ans이 정답보다 많게 나온다. 그래서 고쳐준 코드가
import sys input = sys.stdin.readline N,M = map(int,input().split()) peoplelist = list(map(int,input().split()))[1:] uplist = [i for i in range(N+1)] for i in peoplelist: uplist[i] = 0 #정답을 아는놈드은 0으로 def Union(a,b): x,y = find(a),find(b) if(x<y): uplist[y]=x else: uplist[x] = y def find(x): if x == uplist[x]: return x return find(uplist[x]) party = [] for k in range(M): partylist = list(map(int,input().split()))[1:] party.append(partylist) for i in range(len(partylist)-1): Union(partylist[i],partylist[i+1]) ans = 0 for par in party: lie = True for i in par: if (find(i)==0): lie = False break if(lie == True): ans+=1 print(ans)
마지막에 lie라는 변수를 설정해주고 진실을 아는 사람이 없는 파티에서만 ans+=1을해주어 정답을 제대로 세줄수 있었다.
'알고리즘' 카테고리의 다른 글
17142-python풀이 (0) 2023.05.22 백준2143- python (gold 3) (0) 2023.05.21 [프로그래머스]-이모티콘할인행사(swift) (0) 2023.05.04 알고리즘 2023kakaoblind-개인정보 수집 유효기간(python) (0) 2023.04.30 프로그래머스-귤고르기(Python) (0) 2023.04.29 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)