본문 바로가기
PS/SQL

[프로그래머스] 부모의 형질을 모두 가지는 대장균 찾기

by 행복한라이언 2024. 5. 2.
728x90
반응형

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

프로그래머스

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

programmers.co.kr

 

1. 핵심

  • A는 B를 포함하는가 판단 > 비트연산(&) 사용하기
    • ex) A는 1011(2) 갖으며 B는 1000(2)을 갖는다. A는 B를 포함하는가? A & B = 1000 = B 
    • A & B = B 이면 B가 A에 포함된다는 의미다.
  • 틀린풀이 틀린 이유
    • CONV(컬럼명, 변경 전 진법, 변경 후 진법) → CONV(13, 10, 2) = 1101(2)인데 SQL에서는 이를 이진수으로 인지하지 않는다.
    • 1101(일천 일백 일) & 101 (일백 일) 로 인지해서 & 하면 69가 나온다.

  • 따라서 CONV 쓸 때, CONV의 결과값이 10진수로 인식된다는거 알아두자

2. 코드(MySQL)

-- 코드를 작성해주세요
with tmp as (
    select C.ID, C.GENOTYPE as C_TYPE, P.GENOTYPE as P_TYPE
    from ECOLI_DATA as C
    left join ECOLI_DATA as P on C.PARENT_ID = P.ID
)

-- A가 B에 포함되는가 판단 > 비트연산(&) 활용하기
select ID, C_TYPE as GENOTYPE, P_TYPE as PARENT_GENOTYPE
from tmp
where C_TYPE & P_TYPE = P_TYPE
order by ID asc;

 

  • 틀린 풀이
with tmp as (
    select C.ID, conv(C.GENOTYPE, 10, 2) as C_TYPE, conv(P.GENOTYPE, 10, 2) as P_TYPE
    from ECOLI_DATA as C
    left join ECOLI_DATA as P on C.PARENT_ID = P.ID
)

-- A가 B에 포함되는가 판단 > 비트연산(&) 활용하기
select ID, C_TYPE, P_TYPE, conv(C_TYPE, 2, 10) as GENOTYPE, conv(P_TYPE, 2, 10) as PARENT_GENOTYPE
, C_TYPE & P_TYPE as RN
from tmp
order by ID asc;
728x90
반응형