KATA#23

codataffee·2024년 5월 3일
0

CODEKATA

목록 보기
23/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Recyclable and Low Fat Products

  • 리트코드
    문제가 영어로 되어있어 살짝 당황했는데, 제출 후 속도에 대한 결과도 보여주고,
    다른 사람 풀이도 바로바로 확인이 가능해서 더 재밌게 풀었다.

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT product_id
FROM Products
WHERE low_fats LIKE 'Y' AND
      recyclable LIKE 'Y'


✔️ 문제 #2: Find Customer Referee

✔️ 제출 쿼리

✔️ 쿼리 분석

# null 값을 포함해서 같이 불러오는 문제였는데,
문제가 너무 쉬워서 다른 방식으로 제출했다.

# null 값 같이 조회하는 쿼리
SELECT name
FROM Customer
WHERE referee_id != '2' OR referee_id IS NULL
---
# CTEs 생성으로 null 값 0 처리 후 조회하는 쿼리
WITH A AS (SELECT id,
                  name,
                  COALESCE(referee_id, 0) referee_id
           FROM Customer
           )

SELECT name
FROM A
WHERE referee_id != '2'


✔️ 문제 #3: Big Countries

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT name,
       population,
       area
FROM World
WHERE area >= 3000000 OR
      population >= 25000000


✔️ 문제 #4: Article Views

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT DISTINCT author_id id
FROM Views
WHERE author_id = viewer_id
ORDER BY 1


- PYTHON


✔️ 문제 #1: 내적

✔️ 제출 코드

✔️ 코드 분석

def solution(a, b):
    answer = 0
    for a, b in zip(a, b):
        answer += a*b
    return answer


✔️ 문제 #2: 약수의 개수와 덧셈

✔️ 제출 코드

✔️ 코드 분석

def solution(left, right):
    list = [i for i in range(left,right + 1)]
    answer = 0
    for x in list :
        list2 = [j for j in range(1,x+1) if x % j == 0]
        #list2 반환 시 제일 작은 x의 약수 리스트만 반환..
        #list2 의 갯수가 짝수이면 더하고 홀수이면 빼는 식을 넣어봤는데 통과됐다..
        #x도 반복이 되어 list2가 변하는 게 맞나?
        if len(list2) % 2 == 0:
            answer += x
        else:
            answer -= x
    return answer


✔️ 문제 #3: 문자열 내림차순으로 배치하기

✔️ 제출 코드

✔️ 코드 분석

def solution(s):
    sl = sorted(s)
    sl2 = sl[::-1]
    return ''.join(sl2)
    
# 위 코드를 한 줄로 연결하자면, 아래와 같다.
def solution(s):
    return ''.join((sorted(s)[::-1]))


✔️ CHECK POINT

파이썬에서 사전순으로 문자열들을 정렬하려면 sort()를 사용,
원본 리스트를 변경하지 않고 정렬하려면sorted()를 사용하면 된다.

a= ['abc', 'ghi', 'def']
a.sort()
print(a)  > ['abc', 'def', 'ghi']

  • 문자열 자체를 정렬하기 위해서 .sort() 를 사용하게 되면, 오류가 발생한다.
    string(문자열)의 경우 첫 글자의 주소값으로 참조를 하여,
    str type에 sort()라는 메소드가 없기 때문이다.
    (오류 메세지: str 에 sort 라는 속성이 없다.)
s = "epdlxjRnaskan"
s1 = s.sort()

  • sorted()를 사용하여 문자열 자체의 정렬이 가능하다.
    단, 리스트로 반환.
s = "epdlxjRnaskan"
s2 = sorted(s)
print(s2)

  • sorted(s)로 문자열을 정렬한 리스트를 만들고,
    이를 '구분자'.join을 사용해 하나의 이어진 문자열로 반환하면 된다.

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

0개의 댓글

관련 채용 정보