KATA는 기술과 기술 향상에 초점을 맞춘 코드 챌린지입니다.
일부는 프로그래밍 기본 사항을 교육하는 반면 다른 일부는 복잡한 문제 해결에 중점을 둡니다.
이 용어는 The Pragmatic Programmer 라는 책의 공동 저자인 Dave Thomas 가
무술에서 일본의 카타 개념을 인정하면서 처음 만들어졌습니다.
Dave의 개념 버전은 코드 카타를 프로그래머가
연습과 반복을 통해 기술을 연마하는 데 도움이 되는 프로그래밍 연습으로 정의합니다.
프로그래머스에서 SQL 문제 풀기
✔️ 제출 쿼리
✔️ 쿼리 분석
# 개발자의 ID, 이메일, 이름, 성 선택
SELECT D.ID
, D.EMAIL
, D.FIRST_NAME
, D.LAST_NAME
# SKILLCODES 테이블과 DEVELOPERS 테이블 조인
# 조인 조건 : S.CODE와 D.SKILL_CODE의 비트 AND 연산 결과가 S.CODE와 동일
FROM SKILLCODES S
JOIN DEVELOPERS D ON (S.CODE & D.SKILL_CODE) = S.CODE
# Front End 스킬을 가진 개발자만 선택
WHERE S.CATEGORY = 'Front End'
# ID, 이메일, 이름, 성으로 그룹화하여 중복 제거
GROUP BY 1,2,3,4
# ID 기준 오름차순 정렬
ORDER BY 1
SQL
비트 AND 연산 &
:
두 개의 숫자의 각 비트를 비교하여 두 비트가 모두 1일 때만 1이 되는 연산
비트 AND 연산의 원리
입력된 두 숫자의 각 비트를 논리적 AND 연산을 수행하여 새로운 숫자 생성
# 비트 AND 연산은 다음과 같은 규칙을 따른다 :
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
예시 (10 과 12 의 AND 연산)
# 10과 12의 이진수 표현:
10 (십진수) = 1010 (이진수)
12 (십진수) = 1100 (이진수)
# 비트 AND 연산 수행:
1010 (10의 이진수)
1100 (12의 이진수)
----
1000 (결과 이진수) = 8
따라서 10과 12의 AND 연산 결과는 8 이다.
문제 적용
# SKILLCODES 테이블과 DEVELOPERS 테이블 조인
# 조인 조건 : S.CODE와 D.SKILL_CODE의 비트 AND 연산 결과가 S.CODE와 동일
FROM SKILLCODES S
JOIN DEVELOPERS D ON (S.CODE & D.SKILL_CODE) = S.CODE
# 예를 들어 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면,
# 이는 SKILLCODES 테이블에서 CODE가
# 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에
# 해당하는 스킬을 가졌다는 것을 의미
400 AND 256, 128, 16 :
110010000 (400)
---------
100000000 (256)
010000000 (128)
000010000 (16)
400 에는 256, 128, 16 이 모두 포함된다고 볼 수 있다.