KATA#35

codataffee·2024년 5월 16일
0

CODEKATA

목록 보기
35/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Biggest Single Number

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT MAX(num) num
FROM (
    SELECT num
    FROM MyNumbers
    GROUP BY num
    HAVING COUNT(num) = 1
    ) a


✔️ 문제 #2: Customers Who Bought All Products

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT customer_id
FROM Customer
GROUP BY customer_id
HAVING COUNT(distinct product_key) = (SELECT COUNT(product_key) cnt FROM Product)


- PYTHON


✔️ 문제 #1: 모의고사

✔️ 제출 코드

✔️ 코드 분석

def solution(answers):
    result = []                           # 결과를 담을 리스트
    s1 = [1,2,3,4,5]                      # 학생 1의 찍기 패턴
    s2 = [2,1,2,3,2,4,2,5]                # 학생 2의 찍기 패턴
    s3 = [3,3,1,1,2,2,4,4,5,5]            # 학생 3의 찍기 패턴
    scores = [0,0,0]                      # 학생 1,2,3 의 점수를 담을 리스트 
    for i, answer in enumerate(answers):  # answers를 인덱스와 함께 반복
        if s1[i % len(s1)] == answer:     # i 를 [len(s1); 학생 1의 찍기 패턴 그룹]으로 
        							      # 나눈 나머지가 정답과 같을 경우
            scores[0] += 1                # 학생 1 (인덱스 0) 점수에 1 추가
        if s2[i % len(s2)] == answer:     # 같은 방식으로 찍기 패턴 그룹으로 나눠서 정답과 비교
            scores[1] += 1                # 학생 2 (인덱스 1) 점수에 1 추가
        if s3[i % len(s3)] == answer:
            scores[2] += 1			      # 학생 3 (인덱스 2) 점수에 1 추가
    for i, score in enumerate(scores):    # 학생 1,2,3 의 점수 리스트를 인덱스와 함께 반복
        if max(scores) == score:          # 제일 높은 점수를 가진 학생 (동점 포함) 찾기
            result.append(i + 1)          # 해당 학생을 결과 리스트에 추가
    return result 


✔️ 문제 #2: 소수 만들기

✔️ 제출 코드

✔️ 코드 분석

def solution(nums):
    plus = []                                   # nums의 합을 담을 리스트
    answer = []									# 결과를 담을 리스트
    for i in range(len(nums) - 2):				# nums 리스트의 첫 번째 숫자부터
    									        # 마지막에서 세 번째 숫자까지 반복
        for j in range(i + 1, len(nums) - 1):   # 첫 번째 루프의 i 다음 인덱스부터
                                                # 마지막에서 두 번째 숫자까지 반복
            for k in range(j + 1, len(nums)):   # 두 번째 루프의 j 다음 인덱스부터 
            									# 리스트의 마지막 숫자까지 반복           
                plus.append(nums[i] + nums[j] + nums[k]) 
                                                # 각 인덱스의 값을 모두 더해 plus에 추가
                                                
    for i in plus:							 	# nums
        if i > 1:
            x = True
            for j in range(2, i):
                if i % j == 0:
                    x = False
                    break
            if x:
                answer.append(i)
    return len(answer)

+)

  • 소수 판별 방법에 if all() 함수를 사용해서 괄호 안의 모든 값이 참일 경우로 필터링 후 i 추가

def solution(nums):
    plus = []
    answer = []
    for i in range(len(nums) - 2):
        for j in range(i + 1, len(nums) - 1):
            for k in range(j + 1, len(nums)):
                plus.append(nums[i] + nums[j] + nums[k])
    for i in plus:
        if all(i % j != 0 for j in range(2,i)):
            answer.append(i)
    return len(answer)

✔️ CHECK POINT


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

0개의 댓글

관련 채용 정보