순열
비트 마스킹을 통한 순열 생성 - 정수와 비트연산자 사용
permutation(int cnt, int flag){
for (int i=0;i<N;i++){
if((flag & 1<<i !=0) continue;
numbers[cnt] = input[i];
permutation(cnt+1, flag | 1<<i);
}
}
넥스트 퍼뮤테이션.
- 순열, 조합
넥퍼 사용시 시간복잡도 줄일 수 있다. 1/10
그런데 nPn, nCn 만 가능.
-----
import java.util.Arrays;
import java.util.Scanner;
public class NPTest {
static int N;
static int[] map;
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int N = sc.nextInt();
map = new int[N];
for(int i = 0; i < N; i++) {
map[i] = sc.nextInt();
}
Arrays.sort(map);
do {
System.out.println(Arrays.toString(map));
}while(np(map));
}
static boolean np(int[] p) {
int N = p.length;
int i = N-1;
while(i>0 && p[i-1] >= p[i]) {
i--;
}
if(i == 0) {
return false;
}
int j = N-1;
while(p[i-1] >= p[j]) {
j--;
}
swap(p, i-1, j);
int k = N-1;
while(i < k) {
swap(p, i, k);
i++;
k--;
}
return true;
}
static void swap(int[] p, int a, int b) {
int temp = p[a];
p[a] = p[b];
p[b] = temp;
}
}
알고리즘
Swea4012 - 요리사
- foodB를 구하는 방법 -> A에서 고른 열,행을 전부 0으로.
알고리즘 스터디 - 맵, 셋, 우선순위 큐
우선순위 큐.
- 트리 맵..? -> 트리 맵. 순서 있다.
- 람다..?
- 컴페러터..?
절대값 힙. -> 최대 힙 최소 힙.
char, int 아스키 코드 기준 겹치는거 주의.
맵에 넣을 때 getOrDefault로 새로 넣기.