사용자 세그먼테이션

시간에 따라 사용자별 방문을 관리하며, 각 사용자의 최근성과 빈도를 12개 RF 세그먼트 중 하나로 분류해 질의에 답한다.

보통4해시맵구현시뮬레이션배열면접 대비아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

ZOYI는 사이트에 들어온 온라인 사용자와 대화하는 채널이라는 도구를 만들고 있다. 최근에는 채널을 쓰는 온라인 사용자를 분류하려고 RF(Recency / Frequency) 모델을 도입했고, 다음과 같이 계산해서 사용자를 나누기로 했다.

RF 모델에 따른 사용자 분류. 가로축은 Recency, 세로축은 Frequency다.

0<f1<f2<f3<f40 < f_1 < f_2 < f_3 < f_4, 0<r1<r2<r3<r40 < r_1 < r_2 < r_3 < r_4이고, 모든 fif_irir_i는 정수다.

각 온라인 사용자는 접속 기록에 따라 rr, ff 값이 정해지고 다음 12가지 중 하나로 분류된다.

  • New Customer
  • Promising
  • About to Sleep
  • Hibernating
  • Lost
  • Potential Loyalist
  • Need Attention
  • About to Leave
  • Champion
  • Loyal Customer
  • Can't Lose Them
  • None

이 중 None은 사용자의 접속 기록이 없을 때를 뜻한다. 그림에서 점 (r,f)(r, f)가 두 개 이상의 분류 경계에 놓이면 (r0.5,f0.5)(r - 0.5, f - 0.5)의 분류를 따른다. 예를 들어 (r,f)(r, f)(r4,f2)(r_4, f_2)이면 Hibernating으로 분류되고, (r3,f4)(r_3, f_4)이면 Loyal Customer로 분류된다. 이 규칙까지 적용한 분류는 다음 표와 같다.

ff 구간rr1r \le r_1r1<rr2r_1 < r \le r_2r2<rr3r_2 < r \le r_3r3<rr4r_3 < r \le r_4r4<rr_4 < r
f4<ff_4 < fChampionLoyal CustomerLoyal CustomerAbout to LeaveCan't Lose Them
f3<ff4f_3 < f \le f_4Loyal CustomerLoyal CustomerLoyal CustomerAbout to LeaveAbout to Leave
f2<ff3f_2 < f \le f_3Potential LoyalistPotential LoyalistNeed AttentionAbout to LeaveAbout to Leave
f1<ff2f_1 < f \le f_2Potential LoyalistPotential LoyalistAbout to SleepHibernatingLost
ff1f \le f_1New CustomerPromisingAbout to SleepLostLost

당신은 RUN에 관심 있는 사이트 이용자 현황을 알고 싶어서 RUN 지원 사이트에 채널을 설치하고 분석하려고 한다. 이 사이트에서는 접속한 사용자의 rr, ff를 다음과 같이 정하기로 했다.

  • rr: 현재 시간이 tt일 때, tt에서 그 사용자의 가장 최근 접속 시간을 뺀 값
  • ff: 그 사용자의 접속 횟수

사이트 이용자의 접속 이벤트가 주어질 때 위 기준으로 고객을 분류하는 프로그램을 작성하시오.

입력

첫째 줄에 r1r_1, r2r_2, r3r_3, r4r_4를 나타내는 자연수 4개가 순서대로 공백으로 구분되어 주어진다.

둘째 줄에 f1f_1, f2f_2, f3f_3, f4f_4를 나타내는 자연수 4개가 순서대로 공백으로 구분되어 주어진다.

셋째 줄에 접속 이벤트의 수 NN이 주어진다.

이어지는 NN개의 줄에 이벤트 정보가 일어난 순서대로 주어진다. 이 가운데 ii번째 줄의 이벤트는 시간 ii에 일어난 이벤트를 뜻한다.

각 이벤트는 AABB가 공백으로 구분된 형태로 주어진다. BB는 사용자 이름이고, 공백 없이 길이 10 이하의 알파벳 대소문자로 이루어진다. AA는 1과 2 중 하나의 값을 가진다. 1이면 사용자가 사이트에 접속했다는 뜻이고, 2이면 그 순간 그 사용자가 무엇으로 분류되는지 출력해야 한다.

출력

AA가 2인 이벤트마다 그 고객이 어떻게 분류되는지 한 줄에 하나씩 출력한다. 따옴표는 출력하지 않는다.

제한

  • 1N100,0001 \le N \le 100{,}000
  • 0<r1<r2<r3<r410,0000 < r_1 < r_2 < r_3 < r_4 \le 10{,}000
  • 0<f1<f2<f3<f410,0000 < f_1 < f_2 < f_3 < f_4 \le 10{,}000

힌트

첫 번째 예제를 보자. 시간 3에서 Alex는 접속 횟수가 1회이고 가장 최근 접속이 시간 2였으므로 f=1f = 1, r=32=1r = 3 - 2 = 1이다. 따라서 New Customer로 분류된다.

시간 7에서 Alex는 접속 횟수가 2회이고 가장 최근 접속이 시간 6이므로 f=2f = 2, r=76=1r = 7 - 6 = 1이고 Potential Loyalist로 분류된다.

시간 8에서 RUN은 접속 횟수가 3회이고 가장 최근 접속이 시간 5이므로 f=3f = 3, r=85=3r = 8 - 5 = 3이고 Need Attention으로 분류된다.