DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

생일 멘션이 너무 많아

문제로 돌아가기

해설

  • 평균은 정수 나눗셈으로 구합니다. 평균이 MMM보다 크면 −1-1−1을 출력합니다.
  • 평균이 MMM 이하이면, 평균 이하로 멘션을 보낸 사람은 멘션이 MMM번 이하라서 메시지가 겹치지 않습니다.
  • 111번 메시지는 모든 사람에게 가므로 NNN번 보냅니다.
  • iii번 메시지(i≥2i \ge 2i≥2)는 멘션 횟수가 iii 이상이고 평균 이하인 사람에게 한 번씩 갑니다.
  • 멘션 횟수가 평균 이하인 사람을 횟수별로 센 뒤, MMM부터 거꾸로 누적합을 구하면 iii번 이상 보낸 사람 수가 나옵니다.
  • 사람을 한 번 훑는 데 O(N)\mathcal{O}(N)O(N), 누적합에 O(M)\mathcal{O}(M)O(M)이 들어 시간복잡도는 O(N+M)\mathcal{O}(N+M)O(N+M)입니다.
  • 정렬한 뒤 이분탐색을 써도 됩니다.
    • 222번 이상 멘션을 보낸 사람의 수를 이분탐색 111번으로 구합니다.
    • 평균이 정렬된 배열의 어디에 오는지 이분탐색 111번으로 찾습니다.
    • iii번 이상 멘션을 보낸 사람 중 평균 이하인 사람의 수를 iii마다 이분탐색으로 구합니다(MMM번).
    • 이 풀이의 시간복잡도는 입니다.
O((N+M)log⁡N)\mathcal{O}((N+M)\log N)
O((N+M)logN)