KATA#50

codataffee·2024년 6월 1일
0

CODEKATA

목록 보기
50/114
post-thumbnail

WHAT IS KATA?

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

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


- SQL


✔️ 문제 #1: List the Products Ordered in a Period

✔️ 제출 쿼리

✔️ 쿼리 분석

SELECT p.product_name product_name
     , SUM(o.unit) unit
FROM Orders o LEFT JOIN Products p
     ON o.product_id = p.product_id
WHERE DATE_FORMAT(o.order_date, '%Y-%m') = '2020-02'
GROUP BY 1
HAVING SUM(o.unit) >= 100


- PYTHON


✔️ 문제 #1: 공원 산책

✔️ 제출 코드

✔️ 코드 분석

def solution(park, routes):
    # 초기 위치 'S' 를 찾아 start에 저장 
    H, W = len(park), len(park[0])
    for i in range(H):
        for j in range(W):
            if park[i][j] == 'S':
                start = [i, j]
    # 방향에 따른 이동량 딕셔너리 생성
    direction = {
        'N': (-1, 0),
        'S': (1, 0),
        'W': (0, -1),
        'E': (0, 1)
    }
    
    # 초기 위치를 position 으로 초기화
    position = start
    
    for route in routes:
        d, i = route.split()
        i = int(i)
        # 이동가능 여부 확인하기
        move = True
        for m in range(1, i + 1):
            x = position[0] + m * direction[d][0]
            y = position[1] + m * direction[d][1]
            
            # 공원을 벗어나면 이동 불가
            if x < 0 or x >= H or y < 0 or y >= W:
                move = False
            # 장애물을 만나면 이동 불가
            elif park[x][y] == 'X':
                move = False
                break
        # 이동 가능하면 현재 위치에서 이동 반영
        if move:
            position[0] += i * direction[d][0]
            position[1] += i * direction[d][1]
            
    return position


✔️ CHECK POINT

  • SQL

    • 문제가 다시 쉬워진건가?

    • Orders 테이블 기준으로 각각 필요한 컬럼을 가져오기 위해
      LEFT JOIN을 하고,
      WHERE조건절로 날짜(2020-02)를 걸러낸 뒤,
      그룹화 후 다시 HAVING조건절로 (unit 합계 100 이상),
      SUM 함수로 조회

    • 깔끔?!

  • PYTHON

    • 진~~~짜 어려웠던 문제..

    • 다른 사람들의 힌트를 참고해서 문제의 풀이 흐름을 파악하고,
      최대한 내가 생각해서 코드를 작성해봤다.

      1. 로봇 강아지의 현재 위치를 찾아 start에 저장
      2. routes에 따라 각 키는 방향을 나타내는 문자로,
        값은 그 방향으로 이동할 때의 좌표 변화량을 나타내는 튜플로,
        딕셔너리에 저장했다.
      3. 초기 위치에 routes 값을 더하고 그 위치와 공원 범위, 장애물 위치와 비교하면서 이동이 가능한지 불가능한지 구하고,
      4. 이동이 가능하다면 해당 값을 초기위치에 더하여 현 위치로 반영.
    • 내가 처음부터 이 코드를 생각해내서 작성했다면,
      굉장히 뿌듯했을 듯 하다..
      더 열심히 해보자 !


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

0개의 댓글

관련 채용 정보