1169 주사위던지기1

2020. 1. 30. 09:20Learn/Algorithm

재귀를 이용해서 풀었다.

3번의 경우는 7이라는 배열을 통해 1 부터 6까지의 값이 들어오면 해당 배열을 증가시켜

그 숫자가 나왔다는 것을 인식시키고 해당 숫자가 나올 때 continue를 통해 넘겨주었고.

2번의 경우는 가중치를 주는 경우를 생각해보았는데. 가중치의 경우 소수로만 곱해서 넘겨주거나, 2의 배수로 넘겨주는

방식을 생각했었는데. 해당 방식의 경우 배열이 너무 커지거나 모든 나온 숫자들을 배열에 넘겨주자니 메모리 낭비가 너무 심했다. 

2번의 경우는 계속 생각하다보니 결국, 앞에 나온 수가 뒤에 나온 수보다 작거나 같은 경우만 출력해주면 중복제거가 일어난 다는 점을 알게되어서, 이전에 넣어줬던 해당 숫자부터 탐색을 이어나가도록 코드를 구성하였다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.util.Arrays;
import java.util.Scanner;
  
public class Dice1{
    static int arr[] = new int [7];
    static int arr1[] = new int[7];
    static int arr2[] = new int [16500];
    static int arr3[] = {0,1,3,5,7,11,13};
    static int N;
    static int M;
    static int sum;
    static int cnt;
    static boolean bo = false;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();
        if(M == 1)
            M1(1,N);
        if(M == 2)  
            M2(1,N);
        if(M == 3)  
            M3(1,N);
    }//end of main
     
    public static void M1(int rd, int n) {
        if(n == 0) {
            for(int i = 1; i <= N; i++)
                System.out.print(arr[i] + " ");
            System.out.println();
            return;
        }
         
        for(int i = 1; i < 7; i++) {
            arr[rd] = i;
            M1(rd+1,n-1);
        }
    }
    public static void M2(int rd, int n) {
        if(n == 0) {
            if(arr[1== 0)
                return;
            for(int i = 1; i <= N; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
            return;
        }
         
        for(int i = arr[rd-1]; i < 7; i++) {
            arr[rd] = i;
            M2(rd+1,n-1);
 
        }
    }
    public static void M3(int rd, int n) {
        if(n == 0) {
            for(int i = 1; i <= N; i++)
                System.out.print(arr[i] + " ");
            System.out.println();
            return;
        }
         
        for(int i = 1; i < 7; i++) {
            if(arr1[i] == 1)
                continue;
            arr[rd] = i;
            arr1[i] = 1;
            M3(rd+1,n-1);
 
            arr1[arr[rd]] = 0;
        }
    }
     
}//end of class
cs

'Learn > Algorithm' 카테고리의 다른 글

1209. [S/W 문제해결 기본] 2일차 - Sum  (0) 2020.01.31
1223 계산기 2  (0) 2020.01.30
1175 주사위던지기2  (0) 2020.01.30
2007. 패턴 마디의 길이  (0) 2020.01.29
1289 원재의 메모리 복구하기  (0) 2020.01.22