만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

사용자 세그먼테이션

면접 대비

시간 제한1초메모리 제한1024 MB

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

보통10점 중 4점

유형
해시맵, 구현, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

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_i와 rir_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)가 두 개 이상의 분류 경계에 놓이면 (r−0.5,f−0.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 구간r≤r1r \le r_1r1<r≤r2r_1 < r \le r_2r2<r≤r3r_2 < r \le r_3r3<r≤r4r_3 < r \le r_4r4<rr_4 < r
f4<ff_4 < fChampionLoyal CustomerLoyal CustomerAbout to LeaveCan't Lose Them
f3<f≤f4f_3 < f \le f_4Loyal CustomerLoyal CustomerLoyal CustomerAbout to LeaveAbout to Leave
f2<f≤f3f_2 < f \le f_3Potential LoyalistPotential LoyalistNeed AttentionAbout to LeaveAbout to Leave
f1<f≤f2f_1 < f \le f_2Potential LoyalistPotential LoyalistAbout to SleepHibernatingLost
f≤f1f \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에 일어난 이벤트를 뜻한다.

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

출력

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

제한

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

힌트

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

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

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

예제3

  1. 예제 1

    입력
    1 2 3 4
    1 2 3 4
    8
    1 RUN
    1 Alex
    2 Alex
    1 RUN
    1 RUN
    1 Alex
    2 Alex
    2 RUN
    
    예상 출력
    New Customer
    Potential Loyalist
    Need Attention
    
  2. 예제 2

    입력
    2 4 6 8
    1 3 5 7
    7
    2 Ghost
    1 Ghost
    2 Ghost
    1 Other
    1 Ghost
    1 Ghost
    2 Ghost
    
    예상 출력
    None
    New Customer
    Potential Loyalist
    
  3. 예제 3

    입력
    1 2 3 4
    1 2 3 4
    20
    1 Zed
    1 Pad
    1 Pad
    1 Pad
    1 Pad
    1 Pad
    2 Zed
    1 Ann
    1 Ann
    1 Ann
    1 Ann
    1 Ann
    1 Pad
    1 Pad
    1 Pad
    1 Pad
    1 Pad
    2 Ann
    1 Ann
    2 Ann
    
    예상 출력
    Lost
    Can't Lose Them
    Champion