일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- maven
- JavaScript
- 자바스크립트
- 원격근무
- 탐색알고리즘
- YBM전화영어
- OAuth
- 탄력근무
- 전화영어
- 백엔드공부
- java
- 내돈내산
- Spring
- 백엔드
- Node.js
- 교육철학과 교육사
- 개발자
- 시급합니다
- 최단경로문제
- array
- 그래프탐색
- OpenAPI프로젝트
- 제로베이스
- 자료구조
- npm
- BFS
- Queue
- 백엔드스쿨
- 프로젝트진행
- webServlet
- Today
- Total
개발자취
합해서 특정 값이 되는 경우 찾기 본문
Integer array가 A=[-1, 2, -3, 4]로 주어졌다고 가정하자. 이때 array의 원소 3개를 더해서 특정 값이 되는 경우를 찾고자 한다. 그런데 array의 길이가 길어질수록 계산은 복잡해진다. 따라서 이를 bit값의 형태로 변환하여 array의 원소 중 특정 원소만 찾는 방법으로 생각해본다.
[아이디어 1] 비트 연산자를 사용하여 array 중 특정 규칙에 한해서 선택하는 경우를 모두 찾는다.
비트 연산자를 활용하는 방법은 다음과 같다.
1 << number
다시 말해, << 연산자는 a << b 인 경우 첫번째 피 연산자인 a를 b값(2^b)으로 옮기고, 옮긴 후 빈 공간만큼 0을 채우는 것이다. 예를 들자면 , 1 << 5 (1*2^5)는 32를 반환하는 것이다. 무엇보다도 비트 연산자를 활용하여 2의 거듭제곱 값을 구하는 것이 핵심이다. 비트 연산으로 경우의 수를 찾을 것이기 때문에 아이디어로 꼭 필요한 연산이 되겠다.
[아이디어 2] 비트 단위로 &연산을 한다.
조건문을 통해 &연산의 결과로 1 또는 0이 나오는 경우를 찾는다. 이때 조건은 다음과 같다.
int bitOperator () {
if (('외부 반복자의 변수 A' & 1 << '내부 반복자의 변수 B' ) != 0) return 1
else return 0
}
(ex) 1111 & 0001 = 0001
따라서 integer array의 원소 중 특정 개수를 선택하는 방법에 대해 알아봤다. 이때 특정 경우의 수를 찾기 위한 방법으로는 비트연산자를 사용하고, &연산자로 비트 단위로 연산을 하는 것이다. 이때 비트 연산자의 1의 개수만큼을 찾는 로직을 반복문에 추가하면 원하는 경우의 수를 모두 찾을 수 있을 것이다.
참고 페이지 : https://gksid102.tistory.com/90
'개발 > Dev | 코딩테스트' 카테고리의 다른 글
BOJ | Gold 4/11657/타임머신 (0) | 2023.07.14 |
---|---|
BOJ | Silver 1/1932/정수 삼각형 (0) | 2023.07.05 |
Programmers | Lv.2 / 주차 요금 계산 (0) | 2023.07.05 |
일치하는 문자열을 내림차순으로 정렬하기 (0) | 2023.05.28 |
두 분수를 더하는 방법 (0) | 2023.05.28 |