| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- font-size
- 으
- 타입스크립트
- github
- TypeScript
- TS
- 클론코딩
- entity
- 데이터베이스 #try #이중
- ES5
- npm
- &연산
- 당근마켓
- 0.25px border
- 서버리스 #
- 0.75px border
- Strict
- angular
- 컴포넌튼
- 문서번호
- 10px
- 1px border
- literal
- Props
- jwt
- Websocket
- 0.5px border
- 전역변수
- es6
- ZOOM
Archives
- Today
- Total
복잡한뇌구조마냥
[알고리즘] 완전 탐색 - 부분집합 본문
요즘 알고리즘으로 코딩문제를 많이 풀어보고 있는데, 예전처럼 문제에 속도가 많이나지 않는 상황이 안타깝다..
많은 테스드 중에는 생길 수 있는 모든 상황에 대해 만들고, 그 값들이 결과와 일치하는 문제들이 많다보니까
부분집합을 만드는 코드가 유용해서 따로 정리하려고 한다.
비트 마스크를 이용해서 배열의 모든 부분집합을 구하는 코드이다.
column 배열의 원소들도 만들 수 있는 모든 조합을 includes 배열에 담는 내용이다.
1 << column.length 는
column.length === 4 → 1 << 4 → 16
즉, 0~15까지의 숫자의 이진 수 0000 부터 1111까지의 각 자리에 해당하는 값을 대입한다고 생각하면 된다.
배열이 [0,1,2,3]이 아닌 다른 배열이라도 적용된다.
비트마스크를 통해 각 자리의 포함 여부를 체크하여,
i & (1 << j) → i의 j번째 비트가 1인지 확인해서 1이면 column[j]를 부분집합에 포함하는 코드이다.
const included = [];
const column = [0,1,2,3];
for(let i=1; i<(1<<column.length); i++){
const base = [];
for(let j =0; j<column.length;j++){
if (i & (1<<j)) base.push(column[j]);
}
included.push(base);
}
// included = [
// [ 0 ], [ 1 ],
// [ 0, 1 ], [ 2 ],
// [ 0, 2 ], [ 1, 2 ],
// [ 0, 1, 2 ], [ 3 ],
// [ 0, 3 ], [ 1, 3 ],
// [ 0, 1, 3 ], [ 2, 3 ],
// [ 0, 2, 3 ], [ 1, 2, 3 ],
// [ 0, 1, 2, 3 ]
// ]
LIST
'공통 > 알고리즘 및 코테' 카테고리의 다른 글
| [코딩테스트 + JAVA] 기능개발 - 프로그래머스 Lv.2 (0) | 2025.07.02 |
|---|---|
| [코딩테스트 + Java] 최빈값구하기 - 프로그래머스 Lv.0 (1) | 2025.06.30 |
| [자료구조] 개념 정리 (7) | 2025.05.18 |
| [알고리즘] 다익스트라 (Dijkstra`s Algorithm) (0) | 2025.05.17 |
| [알고리즘] 아호 코라식 (Aho-Corasick) (0) | 2025.05.14 |