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
- & : 둘 다 1일 경우 1
- 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
반응형
'PS > SQL' 카테고리의 다른 글
[프로그래머스] 대장균의 크기에 따라 분류하기 2 (0) | 2024.05.02 |
---|---|
[프로그래머스] 대장균들의 자식의 수 구하기 (1) | 2024.05.01 |
[HackerRank] Weather Observation Station 13 (0) | 2024.04.24 |
[HackerRank] Top Earners (0) | 2024.04.24 |
[HackerRank] The Blunder (0) | 2024.04.23 |