이차원 배열을 접근할 때는 헷갈릴 수 있으니까 index를 row,col로 설정하고 다루는게 내가 이해하기 쉽고 안헷갈린다는걸 알았다.
순열, 조합의 모든 형태를 구할 때는 boolean형 배열을 만들고 해당 숫자를 인덱스로 접근할 수 있게하는 것이 좋다.
순서에 맞춰서 뽑으면서 isSelected라는 배열을 두어서 사용한 수를 체크하고, 재귀적으로 수들을 뽑은 후에는 다시 false로 돌려주는 과정을 통해 뽑은 순서에따른 결과를 저장한다.
(ex. 순열, 조합할 데이터들이 연속인지는 관계가 없다. 왜냐면 그 데이터들을 담고있는 자료형의 index를 인덱스로하는 boolean형이기 때문이다)
class Permutation{
static int R = 3,N = 6;
static int[] input;
static int[] numbers;
static boolean[] isSelected;
public static void main(String[] args){
input = new int[] {0,1,2222,33333333,21728010,950218};
numbers = new int[R];
isSelected = new boolean[N];
permutation(0);
}
private static void permutation(int cnt){
int(cnt == R){
System.out.println(Arrays.toString(numbers);
return ;
}
for(int i = 0;i<N;i++){
if(isSelected[i]) continue;
numbers[cnt] = num[i];
isSelected[i] = true;
permutation(cnt+1);
isSelected[i] = false;
}
}
}
순열과 다르게 뽑은 순서는 중요하지않기 때문에, isSelected 배열은 필요없다.
combination은 재귀로 짜려면 다음과 같이 짜면 된다.
class Permutation{
static int R = 3,N = 6;
static int[] input;
static int[] numbers;
public static void main(String[] args){
input = new int[] {0,1,2222,33333333,21728010,950218};
numbers = new int[R];
combination(0,0);
}
private static void combination(int cnt,int start){
int(cnt == R){
System.out.println(Arrays.toString(numbers);
return ;
}
for(int i = 0;i<N;i++){
numbers[cnt] = num[i];
combination(cnt+1,i+1);
}
}
}
API를 이용해서 토큰값과 userdata를 받아올 때 사용할 수 있다.
URL url = new URL(sUrl+accessToken);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT); // add request header