KATA#18

codataffee·2024년 4월 28일
0

CODEKATA

목록 보기
18/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: 자동차 대여 기록에서 장기/단기 대여 구분하기

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT HISTORY_ID,
       CAR_ID,
       DATE_FORMAT(START_DATE, '%Y-%m-%d') START_DATE,
       DATE_FORMAT(END_DATE, '%Y-%m-%d')END_DATE,
       CASE WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '장기 대여'
            ELSE '단기 대여' END RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY 
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = "2022-09"
ORDER BY 1 DESC

#DATEDIFF 계산 시 끝 날짜에서 시작 날짜 순서로 나열하고,
날짜의 차이에 +1을 해줘야 원하는 몇일차이? 가 나온다!


✔️ 문제 #2: 자동차 평균 대여 기간 구하기

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT CAR_ID,
       ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) >= 7
ORDER BY 2 DESC, 1 DESC

#위 문제와 마찬가지로 DATEDIFF 계산 시 날짜가 하루 빠지는 점 확인하기!


✔️ 문제 #3: 헤비 유저가 소유한 장소

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT P.ID,
       P.NAME,
       P.HOST_ID
FROM PLACES P INNER JOIN
        (
        SELECT ID AI,
               NAME AN,
               HOST_ID AHI
        FROM PLACES
        GROUP BY HOST_ID
        HAVING COUNT(HOST_ID) >= 2
        ) A
        ON P.HOST_ID = A.AHI
ORDER BY P.ID


- PYTHON


✔️ 문제 #1: 정수 내림차순으로 배치하기

✔️ 제출 코드

✔️ 코드 분석

def solution(n):
    list = [str(i) for i in (str(n))]
    list.sort()
    list.reverse()
    lists = ''.join(list)
    return int(lists)


✔️ 문제 #2: 하샤드 수

✔️ 제출 코드

✔️ 코드 분석

def solution(x):
    word = str(x)
    add = 0
    for i in range(len(word)):
        add += int(word[i])
    if x % add == 0:
        return True
    else:
        return False


✔️ 문제 #3: 두 정수 사이의 합

✔️ 제출 코드

✔️ 코드 분석

def solution(a, b):
    answer = 0
    if a <= b:
        for i in range(a,b+1):
              answer += int(i)
    elif a > b:
        for i in range(b,a+1):
              answer += int(i)
    return answer


✔️ CHECK POINT

  • SQL

    • DATEDIFF 함수: 날짜의 차이를 계산하는 함수,
      끝 날짜에서 시작 날짜를 빼기 때문에
      원하는 '~일 차이' 계산을 위해서는 계산값에 +1 을 해줘야 한다!
  • PYTHON

    • join 함수
      리스트의 문자열을 합쳐주는 함수인 join 함수에 대해 알게 되었다.
      '구분자'.join(리스트) < 이렇게 사용하면 되는데,
      위 문제에서는 리스트 컴프리헨션을 사용,
      정수를 자릿수대로 리스트로 만들어준 후,
      리스트를 오름차순 정렬 후 다시 내림차순으로 정렬하고,
      join 함수를 통해 리스트의 문자열들을 이어붙여주고,
      다시 int 함수로 정수화 시켜주는 과정으로 활용해보았다.

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

0개의 댓글

관련 채용 정보