Study/알고리즘
[백준] 2668번_숫자고르기
혤리
2020. 1. 22. 12:46
문제 링크 : https://www.acmicpc.net/problem/2668
2668번: 숫자고르기
세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절히 뽑으면, 그 뽑힌 정수들이 이루는 집합과, 뽑힌 정수들의 바로 밑의 둘째 줄에 들어있는 정수들이 이루는 집합이 일치한다. 이러한 조건을 만족시키도록 정수들을 뽑되, 최대로 많이 뽑는 방법을 찾는 프로그램을 작성하시오. 예를 들어, N=7인 경우 아래
www.acmicpc.net
n = int(input())
dic = {}
for i in range(n):
dic[i+1] = int(input())
while True:
baseSet = set(dic.values())
dic = {key:value for key, value in dic.items() if key in baseSet}
if baseSet == set(dic.values()):
break
print(len(dic))
for key in dic.keys():
print(key)
딕셔너리를 이용해 풀어봤다.