KATA#39

codataffee·2024년 5월 21일
0

CODEKATA

목록 보기
39/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Product Price at a Given Date

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT DISTINCT product_id, 
       10 price 
FROM Products
WHERE product_id NOT IN(
                        SELECT DISTINCT product_id 
                        FROM Products 
                        WHERE change_date <= '2019-08-16' 
                        )
UNION 
SELECT product_id, 
       new_price price
FROM Products 
WHERE (product_id,change_date) IN (
                                   SELECT product_id, 
                                          MAX(change_date) `date` 
                                   FROM Products 
                                   WHERE change_date <= '2019-08-16'
                                   GROUP BY product_id
                                   )


✔️ 문제 #2: Last Person to Fit in the Bus

✔️ 제출 쿼리

✔️ 쿼리 분석

WITH board AS (
    SELECT turn Turn,
           person_id ID,
           person_name Name,
           weight Weight,
           SUM(weight) OVER(ORDER BY turn) sumweight
    FROM Queue
    )
SELECT board.Name person_name
FROM board
WHERE board.sumweight <= 1000
ORDER BY board.sumweight DESC
LIMIT 1


- PYTHON


✔️ 문제 #1: 옹알이 (2)

✔️ 제출 코드

✔️ 코드 분석

def solution(babbling):
	# can 리스트에 허용된 문자열들인 "aya", "ye", "woo", "ma" 포함
    can = ["aya", "ye", "woo", "ma"]
    # 조건을 만족하는 문자열의 개수를 세기 위해 초기값을 0으로 설정
    result = 0
    for i in babbling:
    	#문자열 i가 can 리스트에 직접 포함되어 있다면, result를 1 증가
        if i in can:
            result += 1
        #문자열 i가 can 리스트에 직접 포함되어 있지 않으면, 문자열을 구성하는 부분 문자열을 확인
        else:
        	# comp1과 comp2는 현재 확인 중인 부분 문자열과 이전에 확인된 부분 문자열을 저장
            comp1 = ''
            comp2 = ''
            for j in i:
            	# comp1에 문자를 추가
                comp1 += j
                # 만약 comp1이 comp2와 다르고 comp1이 can 리스트에 포함되어 있으면
                if comp1 != comp2 and comp1 in can:
                	# comp2에 comp1을 저장하고, comp1을 초기화
                    comp2 = comp1
                    comp1 = ''
            # 전체 문자열을 확인한 후 comp1이 빈 문자열이면, 
            # 조건을 만족한다고 판단하여 result를 1 증가
            if comp1 == '':
                result += 1
    return result


✔️ CHECK POINT


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

0개의 댓글

관련 채용 정보