KATA#27

codataffee·2024년 5월 7일
0

CODEKATA

목록 보기
27/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Employee Bonus

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT e.name,
       b.bonus
FROM Employee e left join Bonus b
     ON e.empId = b.empId
WHERE b.bonus < 1000 OR b.bonus IS NULL


✔️ 문제 #2: Students and Examinations

✔️ 제출 쿼리

✔️ 쿼리 분석

WITH SSB AS(
            SELECT s.student_id sid,
                   s.student_name sn,
                   sb.subject_name sbn
            FROM Students s JOIN Subjects sb
                 ON 1 = 1
            ),
      EC AS(
            SELECT student_id,
                   subject_name,
                   COUNT(subject_name) csn
            FROM Examinations
            GROUP BY student_id, subject_name
            )

SELECT SSB.sid student_id,
       SSB.sn student_name,
       SSB.sbn subject_name,
       COALESCE(EC.csn,0) attended_exams
FROM SSB LEFT JOIN EC
     ON SSB.sid = EC.student_id AND SSB.sbn = EC.subject_name
ORDER BY 1, 3


✔️ 문제 #3: Managers with at Least 5 Direct Reports

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT E1.name
FROM Employee E1, Employee E2
WHERE E2.managerId = E1.id
GROUP BY E2.managerId
HAVING COUNT(*) >= 5


- PYTHON


✔️ 문제 #1: 이상한 문자 만들기

✔️ 제출 코드

✔️ 코드 분석

def solution(s):
    s = s.split(' ') # s문자열을 공백을 기준으로 단어로 분리
    answer = []      # 최종 결과를 저장할 리스트
    for word in s:   # 각 단어에 대해 반복
        ss = ''      # 변환된 단어를 저장할 변수
        for x, y in enumerate(word): # 단어 내 문자(y)에 대해 인덱스(x)와 함께 반복
            if x % 2 == 0:           # 인덱스(x)가 짝수이면
                ss += y.upper()      # 해당 문자(y)를 대문자로 ss 변수에 추가
            else:                    # 인덱스(x)가 홀수이면
                ss += y.lower()      # 해당 문자(y)를 소문자로 ss 변수에 추가
        answer.append(ss)            # answer 리스트에 ss 문자 변수 추가
    return ' '.join(answer)          # join 메서드로 answer 리스트 내 문자를 
                                       공백으로 구분하여 합치기


✔️ 문제 #2: 삼총사

✔️ 제출 코드

✔️ 코드 분석

def solution(number):
    result = 0  # 삼총사의 합이 0인 개수를 담을 변수

    for x in range(len(number)-2):  # 서로 다른 수 3개의 조합에 대한 루프
        for y in range(x+1, len(number)-1):
            for z in range(y+1, len(number)):
                if number[x] + number[y] + number[z] == 0:
                    result += 1  # 서로 다른 3개의 수 합이 0인 경우 result에 1씩 더하기

    return result

+)

# itertools 를 활용한 조합 계산하는 방법
해당 내용은 아직 정확하게 이해하지 못했다.
정리를 통해 복습하기!

from itertools import combinations

def solution(number):
    return sum(not sum(c) for c in combinations(number, 3))

✔️ 문제 #3: 크기가 작은 부분문자열

✔️ 제출 코드

✔️ 코드 분석


def solution(t, p):
    answer = 0   # 정답을 담을 변수 초기화
    for i in range(len(t) - len(p) + 1):   # t 문자열의 길이에서 p 문자열의 길이를 뺀 만큼동안 i 부여
        tp = t[i:i+len(p)]   # 슬라이싱: t 문자열의 i 번째부터 (i + p 문자열의 길이) 만큼 잘라오기
        if tp <= p:   # p 문자열의 길이만큼 잘라온 t 문자열의 숫자가 p 문자열의 숫자보다 작거나 같을 때
            answer += 1   # 정답 변수에 1 추가
    return answer


✔️ CHECK POINT


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

0개의 댓글

관련 채용 정보