Notice
Recent Posts
Recent Comments
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Yeongjun's Blog

특정 형질을 가지는 대장균 찾기(프로그래머스) 본문

개발/DB-SQL

특정 형질을 가지는 대장균 찾기(프로그래머스)

yeongjun_333 2024. 7. 6. 16:23

프로그래머스 코딩테스트 SQL > SELECT

문제설명

Table: ECOLI_DATA

Column

  • ID: 댓글 id
  • PARENT_ID: 부모 개체의 id
  • SIZE_OF_COLONY: 개체의 크기
  • DIFFERENTIATION_DATE: 분화되어 나온 날짜
  • GENOTYPE: 개체의 형질

2번 형질이 보유하지 않으면서 1번이나 3번 형질을 보유하고 있는 대장균 개체의 수(COUNT)를 출력하는 SQL 문을 작성해주세요. 1번과 3번 형질을 모두 보유하고 있는 경우도 1번이나 3번 형질을 보유하고 있는 경우에 포함합니다.

예시

각 대장균 별 형질을 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 입니다.

따라서 결과는 다음과 같아야 합니다.

문제해결

  • 대장균 개체의 수 → COUNT(ID) as COUNT
  • BIN() → 숫자의 이진 표현을 문자열 값으로 반환
  • 비트 연산을 통해 2가 아닌 데이터를 제외하고 4와 1인것을 찾아냄 → WHERE (GENOTYPE & 2 = 0) AND (GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0)
SELECT COUNT(ID) as COUNT
FROM ECOLI_DATA
WHERE (GENOTYPE & 2 = 0) # 비트 연산자를 활용해 2진수 계산
AND (GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0)