KATA#28

codataffee·2024년 5월 7일
0

CODEKATA

목록 보기
28/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Confirmation Rate

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT s.user_id,
       ROUND(COALESCE(AVG(c.action = 'confirmed'), 0), 2) confirmation_rate
FROM Signups s LEFT JOIN Confirmations c
     ON s.user_id = c.user_id
GROUP BY s.user_id


✔️ 문제 #2: Not Boring Movies

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT id, movie, description, rating
FROM Cinema
WHERE id % 2 != 0
      AND description NOT LIKE 'boring'
ORDER BY rating DESC


✔️ 문제 #3: Average Selling Price

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT p.product_id,
       COALESCE(ROUND(SUM(p.price*s.units)/SUM(s.units),2),0) average_price
FROM Prices p LEFT JOIN UnitsSold s 
     ON p.product_id = s.product_id 
     AND s.purchase_date BETWEEN p.start_date AND p.end_date
GROUP BY p.product_id


- PYTHON


✔️ 문제 #1: 최소직사각형

✔️ 제출 코드

✔️ 코드 분석

def solution(sizes):
    w = []
    h = []
    # 명함의 너비와 높이를 재구성
    for i in sizes:
        w.append(max(i))
        h.append(min(i))
        # sizes 원소 중 큰 값을 너비, 작은 값을 높이에 추가
    return max(w) * max(h)
    # 너비 중 가장 큰 값과 높이 중 가장 큰 값을 곱하여 크기 계산


✔️ 문제 #2: 시저 암호

✔️ 제출 코드

✔️ 코드 분석

# 아스키 코드, 유니 코드에 대한 이해가 없을 때 접근했던 방식.
모든 알파벳을 딕셔너리에 숫자와 함께 생성하여,
n번 밀어낸 수를 더한 숫자를 알파벳 26개와 나누어떨어지는 값으로 생성해
하나씩 더해주는 방법.

def solution(s, n):
    result = ''
    UPALP ={
        1:'A',2:'B',3:'C',4:'D',5:'E',6:'F',7:'G',8:'H',
        9:'I',10:'J',11:'K',12:'L',13:'M',14:'N',15:'O',
        16:'P',17:'Q',18:'R',19:'S',20:'T',21:'U',22:'V',
        23:'W',24:'X',25:'Y',0:'Z'
    }
    lowalp ={
        1:'a',2:'b',3:'c',4:'d',5:'e',6:'f',7:'g',8:'h',
        9:'i',10:'j',11:'k',12:'l',13:'m',14:'n',15:'o',
        16:'p',17:'q',18:'r',19:'s',20:'t',21:'u',22:'v',
        23:'w',24:'x',25:'y',0:'z'
    }
    UPALP2 ={v:(k+n)%26 for k,v in UPALP.items()}
    lowalp2 ={v:(k+n)%26 for k,v in lowalp.items()}

    for i in range(len(s)):
        if s[i] in UPALP.values():
            k = UPALP2[s[i]]
            result += UPALP[k]
        elif s[i] in lowalp.values():
            k = lowalp2[s[i]]
            result += lowalp[k]
        else:
            result += s[i]
    return result
# chr() / ord() 함수를 통해 아스키 코드로 변환 후 n만큼 더한 후,
다시 26으로 나누어 떨어지는 값을 찾아 더하는 방법

def solution(s, n):
    result = ''
    for alp in s:
        if alp == ' ':
            result += ' '
        elif alp.islower():
            result += chr((ord(alp) - ord('a') + n) % 26 + ord('a'))
        elif alp.isupper():
            result += chr((ord(alp) - ord('A') + n) % 26 + ord('A'))
    return result

✔️ CHECK POINT

  • SQL
    • AVG(c.action = 'confirmed')
      평균을 구하는 집계함수 AVG의 괄호( ) 안에
      조건을 넣어 해당하는 데이터의 평균을 구하는 방법 !
  • PYTHON
    • 시저 암호 문제...
      문자를 숫자로, 숫자를 문자로 바꾸는 유니코드 변환 함수가 있었다.
      ord() and chr()
    • 시간은 오래 걸렸지만, 문자를 컴퓨터에 저장하고 불러오는 방법에 대한
      코드들에 대한 이해를 할 수 있어 좋았다!

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

0개의 댓글

관련 채용 정보