1 minute read


알고리즘 문제풀이

kakao 2021 blind - 매출 하락 최소화 (2)

결국 gg치고 답봄. dp[node][picked]로 접근하는 것은 맞았지만, 각 경우를 제대로 풀지 못함.

pseudo

통계 적용 절차에 대해 마저 생각해 보자. 기초 자료로부터 포인트와 클래스를 계산하는 과정이다.

그러면 기초 자료가 어떤것이 될 지, 포인트와 클래스 등 중간 계산 결과는 어떻게 될 지 알아야 한다.

현재 프로필 페이지에서 확인 가능한 정보:

  • 한 줄 소개 (편집)
  • 지역 (편집)
  • 메일 주소 (편집)
  • 요약 탭
    • 현재 랭크 : 유저 포인트 기반
    • 최대 랭크 : 유저 포인트 기반
    • 전체 활성 유저수(of xxx) : 전체 통계 테이블
    • 팔로우 대상 (스터디?)
      • 타이틀
      • 한줄설명
      • 팔로워 수
    • 활동 다이어그램 (Post,Vote,Comment,Study Group,Answer,Question)
    • 활동 캘린더 (일자별 활동수)
  • 포스트 탭
    • 포스트 목록 & 페이지네이션
      • 포스트: 일단 패스

랭크를 구하려면, 유저 포인트를 알아야 하고, 유저 포인트를 구하려면, 유저 활동들을 자세하게 알아야 한다. 유저 포인트는 어떻게 할 것인가. 위와 같은 활동 (글, 투표, 댓글, 스터디, 답변, 질문) 기반 포인트 계산 스터디에 대한 부분이 좀 문제다. 유저의 통계 정보를 요청할 때마다 유저가 참여하는 스터디들을 쿼리해야 하나? 그건 좀 비효율적일 듯하다. 따라서, 통계 업데이트시에만 그런 정보들을 싹다 한번에 긁어와서 정보 업데이트시키는 쪽으로.

그러면, 우선 기초 정보 활동에 따른 포인트 부여 점수들 가진 목록을 만들자. 그런데 한 편으론, 이런 액션에 따른 포인트 룰을 만들게 되면, 가변적이어야 하는 룰을 적용하지 못한다는 문제가 있는데, 일단 이 부분은 넘어가도록 하자.

근데 이 history를 어느 단에 넣어야 할 지 고민이다. db쪽에 넣어서 확실히 써 질때로 할지, 아니면 라우트 단에 넣어서 미들웨어 같은걸로 만들지. db단에 넣으면 종속이 많이 늘어나는 단점이 있고, 미들웨어 단에 넣는건 확질히 써진 시점으로 하기가 어렵다.

현재 서버 api 구현에도 로직이 다 포함되어 있지 않아서 아마 따로 다 구현해야할 듯하다. 예를 들어, 스터디(categories) 생성 요청에 대해, 로그인이 필요할 것이고, 라우터와 컨트롤러를 따로 두어야 하나?

어쨌든 대충 되었다고 한다면, history 테이블에 각 유저들의 활동 정보가 들어있을 것이다.

근데 지금 상황으론, db에 이런 종속을 만든다는 것 역시 좀 그렇다. 로직이 안되었으니 안되어있는 것은 빼고 일단 그냥 바로 가져올 수 있는 거로만 빨리 만드는 쪽이 더 나을듯도 하다.


Comments