본문 바로가기
ps/SQL

프로그래머스 - 언어별 개발자 분류하기

by nastorond 2024. 10. 17.

언어별 개발자 분류하기

프로그래머스 GROUP by Lv 4

프로그래머스 언어별 개발자 분류하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

 

SKILLCODES Table

NAME TYPE UNIQUE NULLABLE
NAME VARCHAR(N) Y N
CATEGORY VARCHAR(N) N N
CODE INTEGER Y N

 

DEVELOPERS Table

NAME TYPE UNIQUE NULLABLE
ID VARCHAR(N) Y N
FIRST_NAME VARCHAR(N) N Y
LAST_NAME INTEGER N Y
EMAIL VARCHAR(N) Y N
SKILL_CODE INTEGER N N


다음과 같이 테이블이 주어지고, SKILLCODES 의 CODE 는 2진수로 바꿨을 때 1000, 10, 100000 으로 나올 수 있도록 한 데이터들이었다. DEVELOPERS 의 SKILL_CODE은 해당 코드들의 합이어서, 2진수로 표현하면 10110 이런식으로 나타낼 수 있었다.


sql에서도 일반 언어와 같이 비트연산이 가능했든데, 이 문제 풀이를 위해선 조건에 맞는 code 를 모두 더한뒤 그것과 skillcode와 and 연산을 해 풀이할 수 있었다.

Query

select (
    CASE 
        WHEN (SKILL_CODE & (select sum(CODE) from SKILLCODES where CATEGORY like 'Front%')) 
            and SKILL_CODE & (select CODE from SKILLCODES where NAME = 'PYTHON') THEN 'A'
        WHEN SKILL_CODE & (select CODE from SKILLCODES where NAME = 'C#') THEN 'B'
        WHEN SKILL_CODE & (select sum(CODE) from SKILLCODES where CATEGORY like 'Front%') THEN 'C'
        ELSE NULL
    END) as GRADE, ID, EMAIL
from DEVELOPERS
group by GRADE, ID, EMAIL
having GRADE is not NULL
order by GRADE, ID
;

 

후기

국민은행 코테를 준비중이라 평소에 안하던 sql을 부랴부랴 하고 있는데, 생각보다 기능이 많고 어지간하면 쿼리로 다 처리할 수 있을 것 같다는 생각을 하고있다.

조건을 달 때 주로 CASE ~ END 구문을 쓰는데, 아직 익숙치 않아 계속 버벅이는 것 같다.

프로그래머스의 Group by 파트만 익숙해져도 문제는 풀 정도 된다는데, 아직 갈길이 멀다..