본문 바로가기
PS/SQL

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

by 행복한라이언 2024. 4. 30.
728x90
반응형

문제링크

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

 

프로그래머스

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

programmers.co.kr

1. 핵심

  • 비트연산
    • GENOTYPE 를 2진수로 변환하고 오른쪽에서부터 1번형질을 의미한다. 숫자가 1이면 그 형질을 보유하고 있는 것이며 0이면 그 형질을 보유하고 있는 것이 아니다.  ex) 00101 → 1번 형질과 3번 형질을 가지고 있다.
    • 각 형질을 가지고 있는지 판단하기 위해서 비트연산을 한다.
      • 1번형질 보유 판단: GENOTYPE & 1 = 1 (보유) 
      • 2번형질 보유 판단: GENOTYPE & 2 = 0 (보유×)
      • 3번형질 보유 판단: GENOTYPE & 4 = 4 (보유) 
    • 정리: 각 형질을 보유하고 있다는 것은 1을 의미하며 & 연산을 했을 시에 그 형질의 유무를 판단하기 위해서 1 2 4 8 .. 2의 제곱수를 비트연산하도록 한다.
  • 비트연산
    • & : 둘 다 1일 경우 1
      • 2 & 3 = 2
    • | : 하나라도 1일 경우 1
      • 2 | 3 = 3
    • ^: 다르면 1 / 같으면 0 
      • A^A = 0
  • CONV, SUBSTRING 활용하기
    • CONV(컬럼명, 변경 전 진법, 변경 후 진법) 
    • SUBSTRING(컬럼명, 시작위치(1base, -1base), 길이)
    • RIGTH(컬럼명, 길이): 오른쪽에서부터
    • LEFT(컬렁명, 길이): 왼쪽에서부터

2. 코드(MySQL)

select count(ID) as COUNT
from ECOLI_DATA
where (GENOTYPE & 1 = 1 or GENOTYPE & 4 = 4) and (GENOTYPE & 2 = 0)

--conv, substring 사용풀이
select count(*) as COUNT
from ECOLI_DATA
where   (substring(conv(GENOTYPE, 10, 2), -1, 1) = 1 or
        substring(conv(GENOTYPE, 10, 2), -3, 1) = 1) and
        (substring(conv(GENOTYPE, 10, 2), -2, 1) = 0)
728x90
반응형