KATA#32

codataffee·2024년 5월 13일
0

CODEKATA

목록 보기
32/114
post-thumbnail

WHAT IS KATA?

KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.

이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.


- SQL


✔️ 문제 #1: Game Play Analysis IV

✔️ 제출 쿼리

  • 99% 처음 나와봤다!ㅋㅋ

✔️ 쿼리 분석

# 문제: 전체 플레이어 수 중 이틀 연속으로 로그인한 플레이어 비율 조회
# 플레이어들의 최초 로그인 테이블을 인라인 뷰로 생성 후,
# 원래 테이블과 player_id가 같고 최초 로그인 날짜와 로그인 날짜가 같으며,
# DATEDIFF로 날짜의 차이가 1일 (즉, 연속 로그인)인 데이터를 조건으로 INNER JOIN 후, 
# 전체 플레이어 수(서브쿼리로 새로 불러오기)에서 조건에 맞는 플레이어 수를 나누어
# 소수점 2번째 자리까지 반올림 후 표현한 데이터 조회

SELECT ROUND(COUNT(DISTINCT a1.player_id) / 
	   (SELECT COUNT(DISTINCT player_id) FROM Activity), 2) fraction
FROM Activity a1 INNER JOIN 
	(
    SELECT player_id, 
           MIN(event_date)min_date 
    FROM  Activity 
    GROUP BY player_id
    ) a2 
    ON a1.player_id = a2.player_id 
    AND DATEDIFF(a1.event_date, a2.min_date) = 1


✔️ 문제 #2: Number of Unique Subjects Taught by Each Teacher

✔️ 제출 쿼리

✔️ 쿼리 분석

# 문제: 선생님 별 담당한 고유 과목 수 조회
# 갑자기 문제 난이도 급 하향조정?
# teacher_id 별로 그룹화 후 subject_id에 DISTINCT 한 데이터 COUNT

SELECT teacher_id, 
       COUNT(DISTINCT subject_id) cnt
FROM Teacher
GROUP BY teacher_id


- PYTHON


✔️ 문제 #1: 푸드 파이트 대회

✔️ 제출 코드

✔️ 코드 분석

# 문제: food라는 리스트에서 food[i]는 i번 음식의 수를 나타내고,
# 인덱스 0은 물을 나타내서 항상 1,
# 다음 인덱스 1 부터 음식 1을 나타내고 해당 인덱스의 값이 음식의 수를 나타낸다.
# 음식의 수가 절반으로 나누어 떨어지는 갯수만 대회에 사용하고,
# 앞에서부터 물(0)까지, 그 순서를 반대로 이어붙여 문자열로 나타내기

# 음식 수를 절반으로 나누어 떨어지는 갯수만 음식번호만큼 표현할 answer2 변수 생성
# enumerate()를 반복문으로 사용해 음식 번호와 갯수로 나누기
# 참고! 문자열에 숫자를 곱하면 해당 문자열을 곱한 숫자만큼 복사
# 인덱스가 0인 값은 물이므로 제외하고 1부터 끝까지 반복하여
# str(i+1) = 음식 번호를 문자열로 변환
# * (f//2) = 음식 갯수를 절반으로 나누어 떨어지는 수만큼 곱하기
# str(i+1) * (f//2) = 음식 번호를 음식 갯수 절반으로 떨어지는 수만큼 표시
# answer2 에 문자열로 생성
# answer 에 answer2 + 0 + answer2(역슬라이싱으로 거꾸로 출력) 문자열 추가

def solution(food):
    answer2 = ''
    for i, f in enumerate(food[1:]):
            answer2 += str(i+1) * (f//2)
    answer = answer2 + '0' + answer2[::-1]
    return answer


✔️ 문제 #2: 콜라 문제


✔️ 제출 코드

✔️ 코드 분석

def solution(a, b, n):
    answer = 0
    # 빈 병의 갯수가 a 갯수 이상일 때까지 반복
    while n >= a:
    	# n // a : 현재 보유 중인 빈 병(n)으로 얻을 수 있는 콜라 병 수
        # (n // a) * b : 빈 병을 가져다주고 받아오는 콜라 병 수
        answer += (n // a) * b
        # 새로 받은 콜라 병 수만큼 다시 빈 병의 수에 추가
        # (n // a) * b: 새로 받은 콜라로 인해 생긴 새로운 빈 병의 수
        # n % a: 보유 중인 빈 병 중 교환 후 남은 병의 수
        # 교환 후 남은 빈 병과 새로 받은 콜라를 마시고 생긴 빈 병의 수를 합쳐 
        # n 으로 초기화
        n = (n % a) + (n // a) * b
    return answer


✔️ CHECK POINT

  • PYTHON
    • 문자열 * 정수 = 문자열에 정수를 곱하면 해당 정수 갯수만큼 문자열 복제



profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보