728x90

< 링크 >
여기를 클릭하세요 (프로그래머스 고득점 Kit 106문제 모음)

여기를 클릭하세요 (23. 조건에 맞는 개발자 찾기)

< 문제 >
DEVELOPERS 테이블에서 Python이나 C# 스킬을 가진 개발자의 정보를 조회하려 합니다. 조건에 맞는 개발자의 ID, 이메일, 이름, 성을 조회하는 SQL 문을 작성해 주세요. 결과는 ID를 기준으로 오름차순 정렬해 주세요.

< 내가 작성한 코드 > (처음에 작성한 쿼리, 이 쿼리는 오답)
select ID, EMAIL, FIRST_NAME, LAST_NAME
from developers
where skill_code = '256' or skill_code = '1024'
order by id asc;

< 풀이 >
1. 일단 이 문제는 위와 같이 256, 1024와 같은(=) 조건을 조회하는 방식으로 풀었다가 틀렸다.

2. 30분 정도 고민했는데도 방향이 보이지 않자 다른 사람들의 쿼리를 검색하기로 했다.

3. 그러다 '비트마스크' 가 눈에 들어왔다. 처음 들어보는 단어였다.

4. 뭔가 C언어의 비트 연산(&)이 생각나는데, 실제로 쿼리를 아래와 같이 쓴다.
where skill_code & 256 = 256
or skill_code & 1024 = 1024

5. 이것의 의미가 무엇이냐면,
skill_code가 256(Python), 1024(C#)이 아니더라도 ( not equal )
즉 다른 숫자(예 : 2048, 8192 ...)에 256, 1024가 포함되어 있을 수도 있으니
이럴 때는 내가 쓴 오답처럼 ' = ' 로 접근하는 것이 아니라
비트마스크(&)로 접근해야 한다는 것이다.

이 문제... 처음 푸는 사람에게는 완전히 어려울 수도 있겠다.

6. 그래서 정답 코드는 아래와 같다.
< 정답 코드 >
select ID, EMAIL, FIRST_NAME, LAST_NAME
from developers
where skill_code & 256 = 256
or skill_code & 1024 = 1024
order by id;

앞으로 다른 문제들을 풀 때
만약 “비트마스크”라는 단어가 안 나왔더라도,
“여러 스킬을 합쳐서 하나의 숫자로 저장”한다는 설명이 있으면
= 비교로는 안 되겠구나 → 비트 연산 필요하구나
라고 유추할 수 있겠다.



+ Recent posts