KATA#15

codataffee·2024년 4월 24일
0

CODEKATA

목록 보기
15/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: 과일로 만든 아이스크림 고르기

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT FH.FLAVOR
FROM FIRST_HALF FH JOIN ICECREAM_INFO II
     ON FH.FLAVOR = II.FLAVOR
WHERE FH.TOTAL_ORDER > 3000 
      AND II.INGREDIENT_TYPE = 'fruit_based'
ORDER BY FH.TOTAL_ORDER DESC


✔️ 문제 #2: 재구매가 일어난 상품과 회원 리스트 구하기

✔️ 제출 쿼리

✔️ 쿼리 분석

# 재구매에 대한 정의를 제대로 이해하지 못해 시간이 오래 걸렸던 문제..

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY 1, 2 DESC;


✔️ 문제 #3: 조건에 맞는 사용자 정보 조회하기


✔️ 제출 쿼리

✔️ 쿼리 분석

# CONCAT 함수와  SUBSTR 함수를 활용해 원하는 문장 배열이 가능한 것을 보여주는 문제

SELECT U.USER_ID,
       U.NICKNAME,
       CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소,
       CONCAT(SUBSTR(U.TLNO,1,3), '-', SUBSTR(U.TLNO,4,4), '-', 
              SUBSTR(U.TLNO,8,4)) 전화번호
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
     ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY B.WRITER_ID DESC
# 정규 표현식을 활용해 대체하는 방법도 확인했다.

SELECT U.USER_ID,
       U.NICKNAME,
       CONCAT(U.CITY, ' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소,
-------------------------------------------
       REGEXP_REPLACE(U.TLNO, '(.{3})(.{4})(.{4})', '$1-$2-$3') 전화번호
       - REGEXP_REPLACE(원본 문자열 칼럼, 정규표현식 패턴, 치환할 문자열)
       - U.TLNO 칼럼에서 (.(첫번째부터) {3}(세번째까지))
                        (.(그다음부터) {4}(네번째까지))
                        (.(그다음부터) {4}(네번째까지))
         '$1(1번째 그룹) - $2(2번째 그룹) - $3(3번째 그룹)' 형태로 치환
-------------------------------------------
FROM USED_GOODS_BOARD B LEFT JOIN USED_GOODS_USER U
     ON B.WRITER_ID = U.USER_ID
GROUP BY B.WRITER_ID
HAVING COUNT(B.WRITER_ID) >= 3
ORDER BY B.WRITER_ID DESC


- PYTHON


✔️ 문제 #1: 약수의 합

✔️ 제출 코드

✔️ 코드 분석

def solution(n):                - (n을 매개로 하는 solution 함수 정의)
    sum = 0                     - (0으로 초기화한 sum 변수 생성)
    for i in range(1, n+1):     - (1~n 범위로 하는 i를 반복)
        if n % i == 0:          - (n을 i로 나눈 몫이 0이면)
            sum += i            - (sum 변수에 i를 더한다.)
    return sum                  - (sum 반환)


✔️ 문제 #2: 나머지가 1이 되는 수 찾기

✔️ 제출 코드

✔️ 코드 분석

# n을 x로 나누었을 적어도 n-1에서는 나누어진다. 그러므로 n-1까지 진행한다.
최소의 x를 찾는 것이 목적이므로 n의 범위인 2부터 n-1까지 나머지를 확인하다 중간에 나머지가 1인 경우 더 이상 계산하지 않는다.
def solution(n):             - (n을 매개로 하는 solution 함수 정의)
    for x in range (2,n):    - (2~n-1 범위로 하는 x를 반복) / n이 3부터 시작하기 때문
        if (n % x == 1):     - (n 을 x 로 나눈 나머지가 1일 때)
            return x         - (x값 반환)


✔️ 문제 #3: x만큼 간격이 있는 n개의 숫자

✔️ 제출 코드

✔️ 코드 분석

def solution(x,n):                       - (x와 n을 매개로 하는 solution 함수 정의)
    result = [x*i for i in range(1,n+1)] - (x에 i를 곱한 값들의 리스트, i의 범위는 1부터 n까지)
    return result


✔️ CHECK POINT

  • SQL
  • PYTHON
    • range (n, m) 함수는 첫 번째 매개변수 n으로 주어진 숫자에서 시작하여,
      두 번째 매개변수 m으로 주어진 숫자 바로 전까지의 숫자들을 차례대로 생성.
      • m번째까지 범위에 포함시키고 싶다면 m+1 로 설정해야 한다!
    • result = [ ~~ ] 후 return 하게 되면 대괄호 안 데이터를 나열하는 리스트를 확인 가능

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

0개의 댓글

관련 채용 정보