일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 취업부트캠프
- Tableau Desktop Specialist
- Python
- MySQL
- SQL
- 쿼리테스트
- 코테
- 프로그래머스
- 데이터시각화
- 유데미
- tableau
- 부트캠프후기
- 프리온보딩
- 태블로
- trouble shooting
- 실습
- 회고록
- 자격증
- 유데미부트캠프
- 데이터분석
- 코딩테스트
- 러닝스푼즈
- AICE
- 자격증준비
- 2024년
- 유데미코리아
- 스타터스부트캠프
- 데이터분석가
- 프로젝트
- 파이썬
- Today
- Total
신이 되고 싶은 갓지이
SQL 코테 연습 프로그래머스 Lv.2 정답률 45% 문제풀이 본문
바로 앞서 포스팅한 Lv.1의 40% 정답률 문제와 유사한 Lv.2 문제도 풀어보았다.
1. 부모의 형질을 모두 가지는 대장균 찾기(SELECT)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
부모의 형질을 모두 보유한 대장균의 ID(ID), 대장균의 형질(GENOTYPE), 부모 대장균의 형질(PARENT_GENOTYPE)을 출력하는 SQL 문을 작성해주세요. 이때 결과는 ID에 대해 오름차순 정렬해주세요.
처음에는 우선 부모형질을 붙이고, 자식과 부모의 형질을 2진법으로 전환하여 비교하려고했다. 따라서 아래와 같이 2진법으로 변환하고, LIKE함수를 사용하기 위해 문자열로 변환을 했다. 그러나 왜인지 해당 WHERE 문을 만족하는 값이 하나도 나오지 않았다. (포스팅을 하면서 생각해보니 문자열의 길이 때문이 아닌가 싶다. 자식형질은 4자리, 부모형질은 3자리로 되어있으나 이는 문자열의 길이지정 때문이지 사실은 ID에 따라 자릿수가 다르기 때문이 아닌가 생각이 든다.)
-- 1. 실패
SELECT ID, GENOTYPE, PARENT_GENOTYPE
FROM (SELECT A.ID, A.PARENT_ID, CONVERT(CONV(A.GENOTYPE,10,2),CHAR) AS GENOTYPE
, CONVERT(CONV(B.GENOTYPE,10,2),CHAR) AS PARENT_GENOTYPE -- 2진법으로 변환
FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B
ON A.PARENT_ID=B.ID ) as a -- 부모형질 붙이기
WHERE GENOTYPE LIKE '%PARENT_GENOTYPE'
ORDER BY 1
그래서 좀더 찾아보니 MySQL에서는 비트 연산이라고하여 2진법으로 변환하지 않고 2진법 비교가 가능했다.
BIT 연산:
- AND 연산 (&): 두 비트가 모두 1일 때만 1을 반환한다.
- OR 연산 (|): 두 비트 중 하나라도 1이면 1을 반환한다.
- XOR 연산 (^): 두 비트가 다르면 1, 같으면 0을 반환한다.
- NOT 연산 (~): 비트를 반전시킨다.
이 문제에서는 두 비트를 AND로 비교하여 모두 1이면 1, 나머지는 0으로 연산하여 그 결과가 부모형질과 동일하면 부모형질을 포함하고 있는 것으로 판별했다.
예를 들어 자식 형질이 13(1101), 부모형질이 5(0101)이면 AND 연산자의 결과는 0101로 부모형질과 동일하게 나온다.
-- 2. 성공
SELECT a.ID, a.GENOTYPE, b.GENOTYPE as PARENT_GENOTYPE
FROM ECOLI_DATA A
LEFT JOIN ECOLI_DATA B
ON A.PARENT_ID=B.ID -- 부모형질 붙이기
WHERE a.GENOTYPE & b.GENOTYPE = b.GENOTYPE -- 비트 연산으로 확인
ORDER BY 1
'SQL' 카테고리의 다른 글
SQL 코테 연습 프로그래머스 Lv.4 문제풀이 2 - 오류 추후 수정 필요 (2) | 2025.02.13 |
---|---|
SQL 코테 연습 프로그래머스 Lv.4 문제풀이 1 (1) | 2025.02.07 |
SQL 코테 연습 프로그래머스 Lv.1 정답률 40% 문제풀이 (0) | 2025.02.03 |
SQL 코테 연습 프로그래머스 Lv.2 문제풀이 (0) | 2023.12.19 |
맥북에서 오류 없이 MySql Community Edition설치하기 (version을 8.0.31로!) (0) | 2023.02.20 |