62일차

Suhyeon Lee·2024년 12월 27일

CodeKata

SQL

프로그래머스: 조건에 맞는 아이템들의 가격의 총합 구하기

  • 작성한 쿼리
SELECT
  SUM(price) AS total_price
FROM
  item_info
WHERE
  rarity = 'LEGEND'
;

→ 다른 방법으로도 풀어보자!

SELECT
  SUM(price) AS total_price
FROM
  item_info
GROUP BY
  rarity
HAVING
  rarity = 'legend'
;

프로그래머스: 물고기 종류 별 대어 찾기

  • 작성한 쿼리
WITH max_length AS (
  SELECT
    fish_type
    , MAX(length) AS length
  FROM
    fish_info
  GROUP BY
    fish_type
)
SELECT
  id
  , fish_name
  , fi.length
FROM
  fish_info fi
  JOIN max_length ml
  USING(fish_type, length)
  JOIN fish_name_info fni
  USING(fish_type)
ORDER BY
  id
;

→ 다른 방법으로도 풀어보기

WITH length_rank AS (
  SELECT
    *
    , RANK() OVER (PARTITION BY fish_type ORDER BY length DESC) AS rnk
  FROM
    fish_info
)
SELECT
  id
  , fish_name
  , length
FROM
  length_rank
  JOIN fish_name_info
  USING(fish_type)
WHERE
  rnk = 1
ORDER BY
  id
;

참고할 만한 다른 풀이

WITH MAX_LENGTH AS (
  SELECT FISH_TYPE, MAX(LENGTH) 
  FROM FISH_INFO 
  GROUP BY 1
)

SELECT ID, FISH_NAME, LENGTH
FROM FISH_INFO
JOIN FISH_NAME_INFO USING(FISH_TYPE)
WHERE (FISH_TYPE, LENGTH) IN (SELECT * FROM MAX_LENGTH)
ORDER BY 1;
SELECT
    I.ID
    , N.FISH_NAME
    , I.LENGTH
FROM (SELECT 
        *
        , MAX(LENGTH) OVER (PARTITION BY FISH_TYPE) AS MAX_LENGTH
      FROM FISH_INFO
      ) AS I
      JOIN FISH_NAME_INFO AS N
      ON I.FISH_TYPE = N.FISH_TYPE
WHERE I.LENGTH = I.MAX_LENGTH
ORDER BY ID

Python

71. 개인정보 수집 유효기간

  • 작성한 코드
def solution(today, terms, privacies):
    answer = []
    
    today_y, today_m, today_d = map(int, today.split('.'))
    today_num = today_y*12*28 + today_m*28 + today_d
    
    terms_dict = dict()
    for t in terms:
        terms_type, period = t.split()
        terms_dict[terms_type] = int(period)*28
    
    for idx, p in enumerate(privacies):
        cnt = idx+1
        date, terms_type = p.split()

        date_y, date_m, date_d = map(int, date.split('.'))
        date_num = date_y*12*28 + date_m*28 + date_d    
        
        if date_num + terms_dict[terms_type] - 1 < today_num:
            answer.append(cnt)
        
    return answer

참고할 만한 다른 풀이

  • 내 코드에서 반복되는 부분을 함수로 처리한 분이 있음
# 반복되는 코드
today_y, today_m, today_d = map(int, today.split('.'))
today_num = today_y*12*28 + today_m*28 + today_d

date_y, date_m, date_d = map(int, date.split('.'))
date_num = date_y*12*28 + date_m*28 + date_d 

# ↓
# 함수를 만들어 처리
def to_days(date):
    y, m, d = map(int, date.split("."))
    return y*12*28 + m*28 + d
# 날짜를 일수로 변환
def to_days(date):
    y, m, d = map(int, date.split("."))
    return y*12*28 + m*28 + d

def solution(today, terms, privacies):
    answer = []
    today = to_days(today)
    
    # 약관 정보
    term = dict()
    for t in terms:
        type_, period = t.split()
        term[type_] = int(period)*28
    
    # 개인정보 만료기간과 오늘 일수를 비교하여 파기 목록에 추가
    for idx, p in enumerate(privacies):
        numb = idx+1
        date, type_ = p.split()
        
        # 오늘보다 만료기간이 짧으면 파기해야 한다.
        if to_days(date) + term[type_] -1 < today:
            answer.append(numb)
    
    return answer

프로젝트 발표회 관련

  • 읽어보면 좋을 코멘트

    광고별로 퍼널의 목적이 다르다고 가정하신게 좋은 접근이신 거 같아요.
    광고 채널이 같다고 생각하기 쉬운데 실제로는 브랜드 인지가 목표인지 매출이 목표인지에 따라 채널 믹스를 달리하거든요.

  • 잘한 팀 선정 사유 작성

    • 첫 번째로 선택한 팀

      1. 치밀한 대시보드 구성: 경영 진단을 위한 다양한 메트릭이 사용되었음에도 어떤 지표를 우선적으로 고려해야 하는지 비전공자도 쉽게 파악할 수 있었음.(대시보드만을 보여주는것이 아니라 대시보드 옆의 설명을 추가해서 사전지식이 없어도 이해가 가능했던 점)
      2. 도메인 지식을 바탕으로 현재 기업의 강점과 약점을 잘 파악하고 이에 맞는 적절한 액선 플랜을 제시한 부분
      3. 프레임워크를 사전에 설정하여 분석 및 대시보드의 구성을 미리 설정하고 raw data를 시각화하여 한눈에 알아보기 쉽게 만든 점
      4. 많은 내용이 들어갔음에도 간결성을 유지한 점, Tableau로 어디까지 할 수 있는지 보여준 점
    • 두 번째 선택 팀

      1. 대시보드를 만드는 과정과 결과를 상세하게 설명한 점: 해당 대시보드를 처음 접하는 사람들도 쉽게 조작할 수 있도록 튜토리얼 영상과 필터에 대해 자세한 설명이 있어 좋았음
      2. 복잡한 메트릭에 대한 충분한 설명이 뒷받침되어 발표흐름을 따라가기에 좋았음
      3. 경영 진단을 위한 다양한 지표 중 필요한 정보와 불필요한 정보를 구분하고 '덜어내는 것'에 대한 고민을 많이 한 게 느껴짐: 발표는 덜어내는 것도 중요함!
      4. 다른 마케팅 분석팀과 구분되는 특징이 돋보인 점: '경영 진단'이 목적이 아닌 "마케팅" 회사의 의사 결정을 위한 대시보드를 작성한 점

회고

  • 공부를 하다 보니 더 깊게 공부하고 싶어져서 대학원을 진지하게 생각 중인데 가고 싶은 학교 합격 후기들을 읽어보니 내 스펙으로는 어림도 없을 것 같기도 하고😅
    • 모교로 돌아가야 하나? 우리 학교는 대학원 지원하기 전에 인턴쉽 6개월 하는 걸 추천하던데 그럼 서울에 집을 먼저 구해야 한다…
profile
2 B R 0 2 B

0개의 댓글