68일차

Suhyeon Lee·2025년 1월 7일
post-thumbnail

CodeKata

SQL

프로그래머스: 물고기 종류별 잡은 수 구하기

  • 작성한 쿼리
SELECT
  COUNT(*) AS fish_count
  , fish_name
FROM
  fish_info fi
  JOIN fish_name_info fn
  USING(fish_type)
GROUP BY
  fish_name
ORDER BY
  fish_count DESC
;
  • 다른 방식으로도 풀어봤는데 채점 과정에 문제가 있나 봄
    • 처음에는 LEFT JOIN이 아닌 JOIN으로 적었는데 제출하니까 '실패'로 떴음
WITH fish_get_count AS (
  SELECT
    fish_type
    , COUNT(*) AS fish_count
  FROM
    fish_info
  GROUP BY
    fish_type
)
SELECT
  g.fish_count
  , n.fish_name
FROM
  fish_get_count g
  LEFT JOIN fish_name_info n
  USING(fish_type)
ORDER BY
  g.fish_count DESC
;

낙방여우님 코멘트
채점 과정에서 문제가 있는 것으로 보여요. left join과 join의 차이라면 fish_info에 있는 물고기 중에 fish_name_info에 있지 않은 물고기의 유무일 텐데, 서브쿼리로 하지 않고 그냥 join으로 했을 때는 통과 처리가 되고 서브쿼리로 했을 경우에는 join으로 통과가 되지 않고 있어요. 혹시나 싶어서 지금 통과되는 left join에 조건으로 fish_name is not null을 추가하니까 틀리게 되더군요.
무슨 이유로 그것이 통과가 되지 않는건지에 대해서 명확하게 알 수는 없네요.

Python

77. 이진 변환 반복하기

  • 작성한 코드
def solution(s):
    i, cnt = 0, 0
    while s != '1':
        i += 1
        c = s.count('1')
        cnt += len(s) - c
        s = bin(c)[2:]
    answer = [i, cnt]
    return answer

참고할 만한 다른 풀이

  1. 출처
def solution(s):

    zero_count = 0 # 제거된 0의 개수를 저장할 변수
    change_count = 0 # 이진 변환의 횟수를 저장할 변수
    
    # s가 "1"이 될 때까지 반복
    while s != "1":
        
        # s에서 0의 개수를 세어 zero_count에 더하기
        zero_count += s.count("0")
        
        # s에서 1의 개수를 세고, 그 수를 2진법으로 변환한 후, 앞의 '0b'를 제거 후 s에 대입
        s = bin(s.count("1"))[2:]
        
        change_count += 1 # 이진 변환의 횟수를 증가
        
    # 이진 변환의 횟수와 제거된 0의 개수를 리스트로 반환
    return [change_count, zero_count]
  • 유사한 다른 풀이
# 1
def solution(s):
    iteration, count = 0, 0
    while s != '1':
        iteration += 1
        count += s.count('0')
        s = bin(s.count('1'))[2:]
    return [iteration, count]
   
# 2
def solution(s):
    from collections import Counter
    cnt, zero = 0, 0
    while s != '1':
        cnt += 1
        counter = Counter(s)
        zero += counter['0']
        s = bin(counter['1'])[2:]
    return [cnt, zero]
  1. 출처
def solution(s):
    count_zero = 0
    i = 0
    while len(s) > 1 and s != '1':
        i += 1
        count_zero += s.count('0')
        s = bin(s.count('1'))[2:]
    return [i, count_zero]
# 1
def binary(num):
    if num < 2:
        return str(num)
    return binary(num // 2) + str(num % 2)

def solution(s):
    answer = []

    zero_count = 0
    repeat_count = 0
    while s != '1':
        repeat_count += 1
        prev_s_length = len(s)
        s = s.replace('0', '')
        after_s_length = len(s)
        zero_count += prev_s_length - after_s_length
        c = len(s)
        s = binary(c)

    answer.append(repeat_count)
    answer.append(zero_count)
    return answer

# 2
def makeBin(len):
    result = []
    while len != 0:
        if len % 2 == 1:
            result.append("1")
            len = (len-1)/2
        else:
            result.append("0")
            len = len/2
    return result

def solution(s):
    answer = []
    x = s[:]
    zero_count = 0
    itr_count = 0
    if x == "1":
        answer = [0, 0]
    else:
        while x != "1":
            temp = []
            itr_count += 1
            for i in x:
                if i == "1":
                    temp.append("1")
                else:
                    zero_count += 1
            x = "".join(makeBin(len(temp)))
    answer = [itr_count, zero_count]
    return answer

최종 프로젝트 발제

프로젝트의 성공을 위한 3가지

  1. 소통
    • 적극적인 의사 소통으로 팀원들과 프로젝트를 공유하며 진행
  2. 에티켓
    • 타인에게 예의 지키기
    • 소중한 팀원에 대한 존중과 예의는 중요한 에티켓
  3. 끈기
    • 최종 프로젝트는 긴 기간 동안 진행되므로(약 6주) 끈기 있게 버텨야 완성 가능

프로젝트 일정

프로젝트 평가 항목

1. 프로젝트 기획

  1. 프로젝트 목표 및 문제 정의
    • 프로젝트 목표가 명확하고 SMART 기준에 부합하며, 누구나 이해할 수 있도록 구체적으로 설정되었습니까?
    • 해결하고자 하는 문제가 명확하게 정의되었으며, 프로젝트의 필요성과 중요성을 충분히 반영합니까?

  2. 데이터 활용 및 실행 계획
    • 데이터 활용 및 분석 계획이 구체적이고 실행 가능한가요?
    • 제안된 분석 방법론이 문제 해결에 적합하며, 일정 및 마일스톤이 구체적이고 실행 가능합니까?

  3. 기대 효과 및 팀 구성
    • 기획안에서 목표 달성 시 기대되는 결과물이 구체적으로 명시되었으며, 문제 해결과 목표 달성에 기여합니까?
    • 팀원의 역할 분담이 명확히 정의되었고, 프로젝트 진행에 적합합니까?

2. 데이터 EDA 및 전처리

  1. EDA
    • 데이터의 구조와 변수 유형(수치, 범주, 날짜 등)을 정확히 파악하였는가?
    • 데이터의 분포와 기술 통계를 요약하여 명확하게 발표하였는가?

  2. 데이터 클리닝 및 전처리
    • 데이터의 오류, 중복, 불일치를 적절히 수정하였는가?
    • 결측치와 이상치를 적절히 탐지하고 처리하였는가?

  3. 특성 엔지니어링
    • 데이터 분석 목표에 맞게 중요한 특성을 선택하였는가?
    • 필요한 파생 변수를 생성하였는가?
    • 스케일링 등 변환 작업을 효과적으로 수행하였는가?

3. 결과 해석 및 보고

  1. 결과 해석
    • 모델 결과를 명확히 해석하고 설명하였는가?
    • 모델 결과가 문제 해결에 어떻게 기여했는지 논리적으로 설명하였는가?

  2. 인사이트 도출
    • 분석 결과를 통해 도출된 인사이트가 유용하였는가?
    • 비즈니스 또는 연구에 실질적인 가치를 제공하였는가?

  3. 문서화 및 비주얼화
    • 프로젝트 과정, 방법론, 결과를 명확히 문서화하였는가?
    • 결과를 효과적으로 시각화하고, 보고서를 명확하고 전문적으로 작성하였는가?

4. 모델링 및 평가

  1. 모델 선택
    • 문제 유형(군집, 분류, 회귀)에 적합한 모델을 선택하였는가?

  2. 모델 구현
    • 모델을 정확하게 구현하고 코드 오류를 해결하였는가?
    • 모델 성능을 향상시키기 위해 파라미터를 적절히 조정하였는가?

  3. 성능 평가
    • 문제 유형에 맞는 적절한 평가 지표를 사용하여 모델 성능을 평가하였는가?
    • 모델 성능 분석 결과를 명확하고 신뢰성 있게 해석하였는가?

5. 대시보드 제작

  1. 대시보드 설계
    • 대시보드가 사용자 요구 사항을 잘 반영하였는가?
    • 대시보드의 인터페이스가 직관적이고 사용하기 쉬운가?

  2. 데이터 시각화
    • 데이터에 적합한 시각화 기법을 사용하였는가?
    • 시각적 요소가 데이터의 인사이트를 효과적으로 전달하는가?

  3. 대시보드 기능성
    • 대시보드의 상호작용 기능 (필터, 드릴다운 등)이 적절히 구현되었는가?
    • 대시보드가 빠르고 안정적으로 작동하는가?

반드시 지켜야 할 것

프로젝트 완성

  1. 좋은 분위기

    • 그라운드 룰 명확히 설정하기
    • 소통 잘 하기
      • 예쁘게 말하기
      • 객관적인 자료로 설득하고, 설득 당할 준비가 될 것
      • 잠수타지 말기
    • 팀의 모든 구성원이 최대한의 노력을 쏟고, 주도적으로 일할 것
  2. 목표, 일정, 회고

    • 마감기한을 반드시 지키도록 소통하기
      • 빠른 속도를 위해선 되도록 붙어있는 게 중요
      • 마감기한이 지켜지지 않는다면?
        1) 다음 마감기한 설정 및 업무분담 재실시
        2) 업무 분담 이후 개발 마감기한까지 팀장 주관 아래, 빈번한 소통 필요
    • 정기 미팅 일정을 잡아두시고, 미팅의 목적을 확실히 하세요.(매일 2회 실시 추천!)
      • 모든 회의가 무겁고 긴 회의가 아니어도 됩니다.
      • 자주 만나 현재까지의 진행 상황과 사소한 고민을 공유하는 것이 핵심
  3. 여러분의 프로젝트를 설명할 줄 알아야 합니다.

    • 프로젝트에서 어떤 역할을 담당했는지 충분히 설명할 수 있어야 함
    • 프로젝트에서 사용된 기술은 왜 사용하였는지 충분히 설명할 수 있어야 함
      • 프로젝트 관련된 질문은 기술 면접에서 무조건 나올겁니다.
      • 어려운 기술을 많이 ‘써보기만’한 것은 중요하지 않습니다!
      • 중요한 것은 ‘왜’, ‘무엇 때문에’ 사용했는지 설명하는 것이 가장 중요합니다.

문제 해결력 성장

  1. 많이 고민하고 기록할 것
    • 전반기 : 기술적 의사결정에 집중
    • 후반기 : 가설 검증/정의에 집중
  2. 질문을 정리해서 갈 것
    • "좋은 질문"을 하는 방법: 항상 왜? 에 대한 설명을 하려고 노력해요
      1) 나의 의도: 어떤 기능을 구현(또는 문제를 해결)하려고 하는지
      2) 나의 노력: 그 기능을 구현하기 위해 어떤 시도를 했었는지, 어떤 레퍼런스를 참고했는지
      3) 문제 진단: 그 기능을 구현하는데 있어 어떤 문제점을 겪고 있는지
      4) 기대 행동: 무엇이 자신에게 도움이 되는 행동일지
  3. 고민한 것, 질문을 통해 얻은 것을 내 것으로 만들 것 (=회고 할 것)

튜터 미팅

  • 튜터
    • 담당 튜터(추후 안내)
  • 진행
    • 팀 당 30분 진행
    • 팀 전원 필수 참석
    • 카메라, 마이크 필수
  • 내용
    • 분석 과정에서 발생한 기술적 문제 해결과 추가 과제에 대한 조언

마무리

  • 본격적인 취업을 위한 최종 결과물을 만들어 봅시다!
    • 이번 프로젝트는 시간 계획이 무엇보다 중요합니다.
  • 수료를 위해 스파르타코딩클럽 홈페이지에 탑재된 모든 강의를 진도율 100%로 만들어주세요!

수준별 학습

데이터 파이프라인 구축
게임 도메인 데이터의 이해

최종 프로젝트 관련

파이썬 디스코드 봇 강좌

  • 이터널 리턴 서버 점검(목요일) 중에는 API 사용 불가

  • 최종 프로젝트 담당 튜터님은 소현 튜터님(거의 확정)

    • 수시로 피드백 진행하실 예정이시라고 함
  • 소현 튜터님과 상담 진행

    • 채용 공고 확인하기
    • 직무 선택 유연하게 생각할 것
      • 꼭 DA가 아니어도 됨(기획자, 홍보, 광고, …)
        → 일단 들어가는 데 더 중요함!
        입사 후 직무를 바꾸는 게 상대적으로 쉽습니다~

회고

  • 9시 반에 최종 프로젝트 발제가 있어서 코드카타 한 문제씩만 풀었음
profile
2 B R 0 2 B

0개의 댓글