728x90
오늘 내용은 달달 외우기 ⭐
package 순조부;
import java.util.Arrays;
public class 주사위_일반순열 {
static int totalCnt; //완성된 순열의 수
static int n;//주사위 던지는 횟수
static int[] results;//순열 결과를 저장할 배열
static boolean[] isSelected;//중복을 피하기 위해 첫 판에서 어떤 수를 뽑았는지 마크해 놓을 배열
public static void main(String[] args) {
n=2; //2회
results=new int[n];
isSelected=new boolean[7];//0번 index는 쓰지 않고 1~6번 index까지만 활용함
주사위던지기(0);
System.out.println(totalCnt);
}
//주사위-일반순열(순서 o, 중복 x)
public static void 주사위던지기(int cnt) {//cnt는 판의 횟수
//ex. 주사위를 2번 던져서 나오는 모든 경우의 수, 한번 뽑은 걸 다시 뽑을 수 없음==> 중복 체크 코드 있음 : 30
if(cnt==n) {// cnt는 판의 횟수
totalCnt++;
System.out.println(Arrays.toString(results));
return;
}
for (int i = 1; i <= 6; i++) {
if(isSelected[i]) continue;
results[cnt]=i;
isSelected[i]=true;
주사위던지기(cnt+1);
isSelected[i]=false;
}
}
}
2)일반조합 (순서 x, 중복 x)
package 순조부;
import java.util.Arrays;
public class 주사위_일반조합 {
static int totalCnt; // 완성된 조합의 수
static int n;// 주사위 던지는 횟수
static int[] results;// 조합 결과를 저장할 배열
public static void main(String[] args) {
n = 2; // 2회
results = new int[n];
//첫 번째 인수는 판 번호로 0부터 시작해야 배열에 집어 넣기 좋다.
주사위던지기(0, 1);//두 번째 인수는 순서와 중복을 없애기 위한 아이디어.최초에는 주사위의 가장 작은 숫자 1부터 부여.
System.out.println(totalCnt);
}
// 주사위-일반조합
public static void 주사위던지기(int cnt, int start) {// 일반조합(순서 x,중복 x)
if (cnt == n) {
totalCnt++; //최종 15
System.out.println(Arrays.toString(results));
return;
}
for (int i = start; i <= 6; i++) {
results[cnt] = i;
주사위던지기(cnt + 1, i + 1); //두 번째 판을 던지러 갈 때 지금의 i 값보다 1큰수로 시작하게 하면 중복과 순서를 모두 피할 수 있다
}
}
}
728x90
'💡 URECA' 카테고리의 다른 글
[URECA] 수업 중 미션 | 순열, 조합 문제 만들기 (0) | 2025.02.18 |
---|---|
[URECA] Day 16 | 알고리즘 (0) | 2025.02.17 |
[URECA] DAY15 자바 (1) | 2025.02.14 |
[URECA] DAY14 | 자바(5) 재귀 (0) | 2025.02.13 |
[URECA] Day 13 | 자바(5) | 컬렉션 API(ArrayList, HashSet, TreeSet, HashMap) 재귀 (0) | 2025.02.12 |