참여 기록 records의 각 항목은 [day, person]이에요. 같은 사람이 같은 날 여러 번 기록되어도 그 날은 한 번만 세요. 서로 다른 날을 required일 이상 참여한 사람 수를 구해요. 기록은 날짜순이 아닐 수도 있어요.
solution(records, required)가 사람 수를 반환하도록 빈칸을 채워 주세요.
매개변수와 반환값
- 기록 수 n은 1
500, day와 person은 각각 11,000이에요. - required는 1~500이에요. 기록에 등장하지 않은 사람은 세지 않아요.
- 반환값은 조건을 만족한 사람 수인 정수예요.
예시
records = [[1, 7], [1, 7], [2, 7], [1, 8]],required = 2이면 결과는1이에요.records = [[3, 1], [1, 2], [2, 2], [1, 1]],required = 2이면 결과는2이에요.
실행용 입출력
첫 줄에 n required, 다음 n줄에 day person을 입력해요. 반환값 하나를 출력해요.
예시 입력
4 2 1 7 1 7 2 7 1 8
예상 결과
1
예시 입력
4 2 3 1 1 2 2 2 1 1
예상 결과
2
핵심 개념
counting-aggregation: 기록 개수가 아니라 사람마다 서로 다른 날짜 수를 세요.array-1d:for day, person in records는 길이 2인 각 항목을 두 변수로 나누어 읽어요.conditionals:x in collection은 포함 여부,not in은 포함되지 않았는지 확인해요.
딕셔너리 {}는 키에 값을 연결해요. days[person]에는 그 사람의 날짜 집합을 보관해요. set()은 빈 집합, .add(day)는 날짜 추가, len(...)은 원소 수예요. 집합은 같은 날짜를 여러 번 넣어도 한 원소만 남아요. 리스트 컴프리헨션 [식 for _ in range(n)]은 n번 만든 항목을 리스트에 모아요. _는 여기서 반복 횟수만 필요할 때 쓰는 변수 이름이에요.
입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.