Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 렌더링 파이프
- pcce 기출문제 9번 지폐 접기
- pcce 기출문제 풀이
- 잔디 기부 캠페인
- pccp 기출문제 풀이
- c++ 5567
- pcce 기출문제 10번 공원 풀이
- 코드트리 고대 문명 유적 탐사
- 고대 문명 유적 탐사
- texture mapping
- boj 5567
- 잔디 기부
- 백준 5567
- 오블완
- directx 그래픽스
- depth-stencil
- gemmasprint
- c++ 1991
- 수식 복원하기
- 프로그래밍공부
- DirectX12
- 티스토리챌린지
- pcce 기출문제 10번 공원
- PCCE
- DirectX
- boj 1991
- pcce 기출문제 10번 지폐 접기 풀이
- python 고대 문명 유적 탐사
- constant buffre
- root signature
Archives
- Today
- Total
오구의코딩모험
[Python] 1043번 : 거짓말 본문
반응형
문제 설명 3줄 요약
1. 지민이는 과장해서 이야기하는 것을 좋아한다.
2. 그 이야기의 진실을 아는 사람을 최대한 피해서 과장되게 이야기 하고싶다.
3. 최대 몇개의 파티에서 과장되게 이야기할 수 있을까
처음엔 문제를 굉장히 쉽게 생각하여
set로 파티 인원과 진실을 아는 사람의 중복을 제거 하는 것으로 접근하려 했으나,
진실을 아는 인원과 파티를 즐긴 사람도
곧, 진실을 알게되는 인원인 것을 고려해주지 않았다는 것을 깨달았다.
때문에 진실을 아는 인원을
각 파티에 참여했던 인원을 반복해서 탐색하며 갱신해주고,
최종적으로 과장되게 이야기할 수 있는 파티의 수를 카운트 해주었다.
from sys import stdin
if __name__ == "__main__":
## 사람의 수 N, 파티의 수 M
N, M = map(int, stdin.readline().split())
## 이야기의 진실을 아는 사람의 수와 번호
## 진실을 아는 사람 또 알게될 사람은 진실 리스트에 담는다.
truth = list(map(int , stdin.readline().split()))
truth_list = []
party_list = [] # -> 전체 파티를 담는 리스트, 반복해서 탐색할 예정
for idx in range(1,truth[0]+1):
truth_list.append(truth[idx])
for _ in range(M):
## 각 파티마다 오는 사람의 수와 번호
party_num = list(map(int , stdin.readline().split()))
member = []
check = False
for idx in range(1,party_num[0]+1):
if party_num[idx] in truth_list:
check = True
member.append(party_num[idx])
## 진실을 아는 사람이 포함된 파티
if check:
for i in member:
if i not in truth_list:
truth_list.append(i)
check = False
else:
party_list.append(member)
cnt = 0
## 진실을 아는 인원 리스트를 갱신해주며 파티를 걸러낸다.
while(len(truth_list) != cnt):
check_num = truth_list[cnt]
remove_list = []
for idx, party in enumerate(party_list):
if check_num in party:
for p in party:
if p not in truth_list:
truth_list.append(p)
remove_list.append(idx)
for idx in sorted(remove_list, reverse=True):
del party_list[idx]
cnt += 1
print(len(party_list))
구현하는데는 큰 어려움이 없었지만,
곧 알게될 사람인지를 고려해주는 부분을 생각해내는데 시간이 걸렸다.
그 부분을 파악한다면,
쉽게 해결 완료!
끝!
반응형
'프로그래밍 공부 > 백준 알고리즘' 카테고리의 다른 글
[Python] 14502번 : 연구소 (0) | 2023.02.15 |
---|---|
[Python] 1351번 : 무한 수열 (0) | 2023.02.14 |
[Python] 1021번 : 회전하는 큐 (0) | 2023.02.14 |
[Python] 1003번 : 피보나치 함수 (0) | 2023.02.12 |
[Python] 1002번 : 터렛 (0) | 2022.08.08 |
Comments