| 자릿수와 경우의 수
(1) X진수의 K자릿수에 대한 모든 경우의 수
어떤 연속된 10진수 수 3개에 대한 배열이 있다고 가정할 때,
각 자리에 올 수 있는 수의 범위는 0 ~ 9이다.
0 | 0 | 0 |
0 | 0 | 1 |
0 | 0 | 2 |
0 | 0 | 3 |
0 | 0 | 4 |
0 | 0 | 5 |
0 | 0 | 6 |
0 | 0 | 7 |
0 | 0 | 8 |
0 | 0 | 9 |
..... (생략)
10진수의 세 자릿수에 대한 모든 경우의 수는 아래와 같다
--> 10 x 10 x 10 = 1000 (곧, 000 ~ 999)
결국 x 진수의 k자릿수에 대한 모든 경우의 수는
--> x * x * x.... = x^k (자릿수 하나당 0 ~ x-1)
(2) x진수의 각 자릿수 하나당 0 ~ x-1 범위를 가지며, x - 1를 넘어서면 올림이 이루어진다.
- 10진수일 때
1 | 1 | 8 |
1 | 1 | 9 |
1 | 2 | 0 |
- 8진수일 때
1 | 1 | 8 |
1 | 2 | 0 |
1 | 2 | 1 |
- 10진수인 세자리수 ㅁㅁㅁ 에 올 수 있는 모든 경우의 수는 10^3개였다.
- 8진수인 세자리수 ㅁㅁㅁ 에 올 수 있는 모든 경우의 수는 8^3개이다.
- N진수인 세자리수 ㅁㅁㅁ 에 올 수 있는 모든 경우의 수는 N^3개이다.
- 복합진수(a,b,c)인 세자리수 ㅁㅁㅁ 에 올 수 있는 모든 경우의 수는 (a x b x c)개이다.
(3) 복합 진수의 전체 범위 : 0 ~ (a x b x c) - 1
- 8진수 세자릿수
전체 범위 : 0부터 8^3 - 1
- 복합진수일 때
전체 범위 : 0부터 (a x b x c) - 1
| 코드 구현
문제 :
세 개의 교실 a, b, c에 수용 가능 인원수가 4, 3, 4 일 때, 각 교실에 배치할 수 있는 인원수의 모든 경우의 수를 나열하시오.
public class Test06_05_2_jarik {
public static void main(String[] args) {
int[] digit = {4, 3, 4}; // 각 수용인원
int allCases = Arrays.stream(digit).reduce(1, (x, y) -> x*(y+1)); // 각 자리에 올 수 있는 모든 경우의 수
System.out.println("abc abc abc abc abc abc abc abc abc abc");
for (int i = 0; i < allCases; i++) { // 000~allCases-1
int[] buff = new int[3]; // 세자릿수 버퍼 역할
long denominator = allCases; // 분모 : allCases
long numerator = i; // 분자 : 000, 001, 002 .....
for (int j = 0; j < 3; j++) { //주어진 수 i(0~allCases-1)에 대해
denominator /= digit[j] + 1; // 자릿수를 맞추고
buff[j] = (int) (numerator / denominator) ; // 자릿수의 수 구하기 ex. 999/100
numerator %= denominator; // 자릿수 외 나머지 구하기 ex. 999%100
}
// 출력
String result = String.format("%d%d%d", buff[0], buff[1], buff[2]);
if ((i + 1) % 10 == 0) {
System.out.println(result);
}else {
System.out.print(result + " ");
}
}
}
}
>> 결과
abc abc abc abc abc abc abc abc abc abc
000 001 002 003 004 010 011 012 013 014
020 021 022 023 024 030 031 032 033 034
100 101 102 103 104 110 111 112 113 114
120 121 122 123 124 130 131 132 133 134
200 201 202 203 204 210 211 212 213 214
220 221 222 223 224 230 231 232 233 234
300 301 302 303 304 310 311 312 313 314
320 321 322 323 324 330 331 332 333 334
400 401 402 403 404 410 411 412 413 414
420 421 422 423 424 430 431 432 433 434
'Computer Science > Data Structure' 카테고리의 다른 글
[선형자료구조] 스택, 큐, 데크 (0) | 2022.07.22 |
---|---|
[선형자료구조] 연결리스트 (0) | 2022.07.22 |
[선형자료구조] 배열과 ArrayList (0) | 2022.07.18 |
소수판별법 - 에라토스테네스의 체 (0) | 2022.07.15 |
선형자료구조 총정리 (0) | 2022.07.12 |