문제
2번 형질이 보유하지 않으면서 1번이나 3번 형질을 보유하고 있는 대장균 개체의 수(COUNT)를 출력하는 SQL 문을 작성해주세요. 1번과 3번 형질을 모두 보유하고 있는 경우도 1번이나 3번 형질을 보유하고 있는 경우에 포함합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/301646
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
각 대장균 별 형질을 2진수로 나타내면 다음과 같습니다.
ID 1 : 1000₍₂₎
ID 2 : 1111₍₂₎
ID 3 : 1₍₂₎
ID 4 : 1101₍₂₎
각 대장균 별 보유한 형질을 다음과 같습니다.
ID 1 : 4
ID 2 : 1, 2, 3, 4
ID 3 : 1
ID 4 : 1, 3, 4
따라서 2번 형질이 없는 대장균 개체는 ID 1, ID 3, ID 4 이며
이 중 1번이나 3번 형질을 보유한 대장균 개체는 ID 3, ID 4 입니다.
풀이
실패
연산자를 사용하는 것을 제대로 이해하지 못해서 오류가 났다.
GENOTYPE이 0100 이나 0001와 같은 자리에 1이 있는지 확인하기 위해서는
0100의 10진수 4, 0001의 10진수 1을 사용하여 BIT연산을 해야 한다.
또한 결과가, 1이나 0으로 (TRUE나 FALSE로) 나오는 줄 알았는데,
그냥 1111 & 0010 = 0010 으로 나오는 것으로 생각하면 된다.
그래서 결과값에도 1or0이 아닌 원하는 2진수의 10진수를 써줘야 한다.
쉽게 말해, 비트 연산자는 2진수 계산을 사용하고 있지만,
우리가 코드를 짤 때는 10진수로 표현해야 한다는 것이다.
성공
참고
https://wing-beat.tistory.com/140
[프로그래머스 코딩테스트 연습 SQL - 14] 조건에 맞는 개발자 찾기 (MySQL) | SQL BIT 연산
처음에 틀렸던 코드:SELECT ID, EMAIL, FIRST_NAME, LAST_NAMEFROM DEVELOPERSWHERE (BIN(SKILL_CODE) LIKE '%1__________') OR (BIN(SKILL_CODE) LIKE '%1________')ORDER BY ID;처음에는 SKILLCODES 테이블에서 PYTHON, C#의 BIN을 확인한 후 수제
wing-beat.tistory.com
'코딩공부' 카테고리의 다른 글
[프로그래머스] 배열 뒤집기- 파이썬 Python (1) | 2024.12.27 |
---|---|
[프로그래머스] Level.1 / SELECT - 부모의 형질을 모두 가지는 대장균 찾기 (1) | 2024.12.22 |
[프로그래머스] Level.3 / SELECT - 대장균들의 자식의 수 구하기 (0) | 2024.12.22 |
[HackerRank] SQL / Basic Join / Easy / Average Population of Each Continent (1) | 2024.12.22 |
[HackerRank] SQL / Basic Join / Medium / Top Competitors (0) | 2024.12.22 |