KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
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
✔️ 제출 쿼리
✔️ 쿼리 분석
SELECT id, movie, description, rating
FROM Cinema
WHERE id % 2 != 0
AND description NOT LIKE 'boring'
ORDER BY rating DESC
✔️ 제출 쿼리
✔️ 쿼리 분석
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
✔️ 제출 코드
✔️ 코드 분석
def solution(sizes):
w = []
h = []
# 명함의 너비와 높이를 재구성
for i in sizes:
w.append(max(i))
h.append(min(i))
# sizes 원소 중 큰 값을 너비, 작은 값을 높이에 추가
return max(w) * max(h)
# 너비 중 가장 큰 값과 높이 중 가장 큰 값을 곱하여 크기 계산
✔️ 제출 코드
✔️ 코드 분석
# 아스키 코드, 유니 코드에 대한 이해가 없을 때 접근했던 방식.
모든 알파벳을 딕셔너리에 숫자와 함께 생성하여,
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
AVG(c.action = 'confirmed')
AVG
의 괄호( )
안에ord()
and chr()