KATA#61

codataffee·2024년 6월 13일
0

CODEKATA

목록 보기
61/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: Type Of Triangle

✔️ 제출 쿼리

✔️ 쿼리 분석

# 삼각형 형태 구분하기
SELECT CASE WHEN A = B AND B = C THEN 'Equilateral'
            WHEN (A = B OR A = C OR B = C) AND A + B > C THEN 'Isosceles'
            WHEN A != B AND B != C AND C != A AND A + B > C THEN 'Scalene'
            ELSE 'Not A Triangle' 
            END ISTRIANGLES
FROM TRIANGLES


- PYTHON


✔️ 문제 #1: 행렬의 곱셈

행렬 곱셈이라는 개념을 생전 처음 들었다..
선형대수를 공부하면 다루는 내용이라고 하는데,
아직 관련된 공부를 해본 적이 없기 때문에
구글링 + 다른 사람들의 풀이를 참고했다.
개념정리만 해두고 나중에 기회가 있을 때 깊게 공부해보는 것으로..

✔️ 제출 코드

✔️ 코드 분석

def solution(arr1, arr2):
    # arr1의 행과 열의 크기
    n1 = len(arr1)
    m1 = len(arr1[0])
    
    # arr2의 행과 열의 크기
    n2 = len(arr2)
    m2 = len(arr2[0])
    
    # 결과 행렬 초기화 (크기는 n1 x m2)
    result = [[0] * m2 for _ in range(n1)]
    
    # 행렬 곱셈 수행
    for i in range(n1):
        for j in range(m2):
            for k in range(m1):
                result[i][j] += arr1[i][k] * arr2[k][j]
    
    return result


✔️ CHECK POINT

  • PYTHON

    • 행렬 곱셈 ?

      행렬 곱셈은 두 행렬 A와 B를 곱하여 새로운 행렬 C를 만드는 연산이다.
      이 연산은 다음 조건을 만족할 때 가능 :
      행렬 A의 열(column)의 수와 행렬 B의 행(row)의 수가 같아야 한다.

    • 행렬 A의 크기가 𝑚×𝑛 이고, 행렬 B의 크기가 𝑛×𝑝일 때,
      결과 행렬 C의 크기는 𝑚×𝑝가 된다.

    • 결과 행렬 C의 각 원소 𝐶[𝑖][𝑗] 는 A의 i번째 행과 B의 j번째 열의 원소를 곱하여 더한 값.

      예시)

def solution(arr1, arr2):
    # arr1의 행과 열의 크기
    n1 = len(arr1)         # arr1의 행(row)의 개수
    m1 = len(arr1[0])      # arr1의 열(column)의 개수
    
    # arr2의 행과 열의 크기
    n2 = len(arr2)         # arr2의 행(row)의 개수
    m2 = len(arr2[0])      # arr2의 열(column)의 개수
    
    # 결과 행렬 초기화 (크기는 n1 x m2)
    # for _ in range(n1)에서 _는 파이썬에서 반복문 안의 변수를 사용하지 않을 때 
    # 관례적으로 사용되는 이름으로, 변수명을 명시하지 않고 반복문을 실행할 수 있다.
    # [0] * m2는 0으로 채워진 길이 m2의 리스트를 생성한다.
    # for _ in range(n1)는 위에서 생성한 리스트를 n1번 반복하여 
    # 결과적으로 𝑛1×𝑚2 크기의 2차원 리스트를 생성한다.
    result = [[0] * m2 for _ in range(n1)]
    # 예) 𝑛1 = 3 이고 𝑚2 = 2 인 경우 :
    # result = [[0, 0], [0, 0], [0, 0]]
    
    # 행렬 곱셈 수행
    for i in range(n1):            # 행렬 arr1의 각 행을 반복
        for j in range(m2):        # 행렬 arr2의 각 열을 반복
            for k in range(m1):    # 행렬 곱셈을 위해 arr1의 열과 arr2의 행을 반복
                result[i][j] += arr1[i][k] * arr2[k][j]
                # 행렬 arr1의 i번째 행과 행렬 arr2의 j번째 열의 원소를 곱한 후, 
                # 결과를 result[i][j]에 더하기
    
    return result

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

0개의 댓글

관련 채용 정보