KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
✔️ 제출 쿼리
✔️ 쿼리 분석
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
✔️ 제출 코드
✔️ 코드 분석
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
SQL
문제가 다시 쉬워진건가?
Orders 테이블 기준으로 각각 필요한 컬럼을 가져오기 위해
LEFT JOIN
을 하고,
WHERE
조건절로 날짜(2020-02)를 걸러낸 뒤,
그룹화 후 다시 HAVING
조건절로 (unit 합계 100 이상),
SUM
함수로 조회
깔끔?!
PYTHON
진~~~짜 어려웠던 문제..
다른 사람들의 힌트를 참고해서 문제의 풀이 흐름을 파악하고,
최대한 내가 생각해서 코드를 작성해봤다.
- 로봇 강아지의 현재 위치를 찾아 start에 저장
routes
에 따라 각 키는 방향을 나타내는 문자로,
값은 그 방향으로 이동할 때의 좌표 변화량을 나타내는 튜플로,
딕셔너리에 저장했다.- 초기 위치에
routes
값을 더하고 그 위치와 공원 범위, 장애물 위치와 비교하면서 이동이 가능한지 불가능한지 구하고,- 이동이 가능하다면 해당 값을 초기위치에 더하여 현 위치로 반영.
내가 처음부터 이 코드를 생각해내서 작성했다면,
굉장히 뿌듯했을 듯 하다..
더 열심히 해보자 !