← 실전 문제

서로 다른 날의 참여 기록

Python빈칸 채우기

참여 기록 records의 각 항목은 [day, person]이에요. 같은 사람이 같은 날 여러 번 기록되어도 그 날은 한 번만 세요. 서로 다른 날을 required일 이상 참여한 사람 수를 구해요. 기록은 날짜순이 아닐 수도 있어요.

solution(records, required)가 사람 수를 반환하도록 빈칸을 채워 주세요.

매개변수와 반환값

  • 기록 수 n은 1500, day와 person은 각각 11,000이에요.
  • required는 1~500이에요. 기록에 등장하지 않은 사람은 세지 않아요.
  • 반환값은 조건을 만족한 사람 수인 정수예요.

예시

  1. records = [[1, 7], [1, 7], [2, 7], [1, 8]], required = 2이면 결과는 1이에요.
  2. 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까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기