'Algorithm/풀었던문제'에 해당되는 글 34건

  1. 2019.12.30 알고리즘 기초 - 32 ( 누적합, 함수 )
  2. 2019.12.30 알고리즘 기초 - 31 ( 팩토리얼, 함수 )
  3. 2019.12.30 알고리즘 기초 - 30 ( 더하기 & 마이너스 )
  4. 2019.12.30 알고리즘 기초 - 29 ( 음계 )
  5. 2019.12.30 알고리즘 기초 - 28 ( 진수 변환 ) 2
  6. 2019.12.29 알고리즘 기초 - 27 ( 달팽이 출력 )
  7. 2019.12.29 알고리즘 기초 - 26 ( 상수 비교 )
  8. 2019.12.25 알고리즘 기초 - 25 ( 더하기 사이클 )

알고리즘 기초 - 32 ( 누적합, 함수 )

Algorithm/풀었던문제 2019. 12. 30. 14:38



Main.java


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
package Problem32;
 
import java.util.Scanner;
 
public class Main {
 
    
    //두 수를 받아서 두 수 사이에 값을 더해서 반환할 함수
    public static int function(int num_1, int num_2) {
        
        //total이란 변수를 만들고 반복문이 회전할 때마다 숫자를 계속 더한 후에 total값을 리턴해준다.
        int total = 0;
        
        for(int i = num_1; i <= num_2; i++) {
            
            total += i;
            
        }
        
        return total;
        
    }
    
 
    public static void main(String[] args) {
        
        
        
        
        //두 수를 입력해서 두 수 사이의 합을 구하기
        
        System.out.println("두 수를 입력하세요.");
        
        int num_1;
        
        int num_2;
        
        Scanner scan = new Scanner(System.in);
        
        num_1 = scan.nextInt();
        
        num_2 = scan.nextInt();
        
        int total = function(num_1,num_2);
        
        System.out.println("정답 :"+total);
        
        
    }
 
}
 
cs




출력결과





출처


https://www.youtube.com/watch?v=hmc_m_eTek4&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=33

:

알고리즘 기초 - 31 ( 팩토리얼, 함수 )

Algorithm/풀었던문제 2019. 12. 30. 13:42




- 재귀함수 -


하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로 주어진 문제를 푸는 방법이다. 


재귀 호출이나 되부름 이라고 불리기도 한다.




Main.java


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
package Problem31;
 
import java.util.Scanner;
 
public class Main {
 
    // 숫자를 받아서 리턴하는 함수를 생성함
    public static int function(int number) {
 
        // 팩토리얼한 수를 저장할 변수
        int total = number;
 
        for (int i = 1; i < number; i++) {
 
            total *= i;
        }
 
        return total;
 
    }
 
    public static void main(String[] args) {
 
        // 입력한 수의 팩토리얼 구하기
 
        // 숫자 입력받기
 
        System.out.println("숫자를 입력하세요.");
 
        int number;
 
        Scanner scan = new Scanner(System.in);
 
        number = scan.nextInt();
 
        // 위에서 팩토리얼을 계산한 수를 저장할 변수.
        int total = function(number);
 
        System.out.printf("결과 : %d", total);
 
    }
 
}
 
cs



출력 결과




출처


https://www.youtube.com/watch?v=JyaK14AhGm4&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=32

:

알고리즘 기초 - 30 ( 더하기 & 마이너스 )

Algorithm/풀었던문제 2019. 12. 30. 13:17



Main.java


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
package Problem30;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        
        //숫자 하나를 입력받고, 그 숫자만큼 +와 -를 반복해서 출력하는 구문
        System.out.println("숫자를 입력하세요.");
        
        int number;
        
        Scanner scan = new Scanner(System.in);
        
        number = scan.nextInt();
        
        
        //반복문을 사용해서 입력한 숫자만큼 출력되게 함
        for(int i = 1; i <= number; i++) {
            
            //1보다 크고, 2로 나누어서 나머지가 1이되는 i일때는 -가 앞에 출력 (즉, 홀수일때는 -가 앞에 출력)
            if(i > 1 && i % 2 == 1) {
                
                System.out.print("-");
                
                
            //2로 나누어서 나머지가 0이되는 i일때는 +가 앞에 출력 (즉, 짝수일때는 +가 앞에 출력)    
            }else if(i % 2 == 0){
                
                System.out.print("+");
                
            }
            
            System.out.printf("%d"+" ",i);
            
        }
        
        
 
    }
 
}
 
cs



출력결과





출처


https://www.youtube.com/watch?v=As9vKkG7MfI&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=31



:

알고리즘 기초 - 29 ( 음계 )

Algorithm/풀었던문제 2019. 12. 30. 11:36


Main.java


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
package Problem29;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        
        //숫자를 받고 그 숫자가 아래의 숫자와 일치하면 각각 출력문을 출력하게 하고, 
        //아니라면 mixed를 출력하도록 작성함 String이므로 equal로 비교할 예정
        
        System.out.println("판별할 숫자를 입력하세요.");
        
        
        Scanner scan = new Scanner(System.in);
        
        String number = scan.nextLine();
        
        
        //입력된 숫자를 판별한 String 변수 두개를 선언
        String chalye = "1 2 3 4 5 6 7 8";
                
        String de_chalye = "8 7 6 5 4 3 2 1";


        
        if(number.equals(chalye)) {
            
            System.out.println("출력: ascending");
            
            System.out.println();
        }
        
        else if(number.equals(de_chalye)) {
            
            System.out.println("출력: descending");
            
            System.out.println();
        }
        
        else {//위의 두가지 경우 전부다 해당되지 않을 경우 출력되는 구문
            
            System.out.println("출력: mixed");
            
            System.out.println();
            }
        }
    }
 
 
 
cs



출력결과






출처


https://www.youtube.com/watch?v=ONOTz6RsPzo&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=30

:

알고리즘 기초 - 28 ( 진수 변환 )

Algorithm/풀었던문제 2019. 12. 30. 11:20



Main.java


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
package Problem28;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
    
        //진수변환
        
        //변환시킬 변수와 몇진수로 변환시켜야될지 판단하는 변수를 받아야한다.
        
        int number = 19;
        
        int n = 2;
        
                
        //배열 1칸 1칸당 숫자를 하나씩 저장해놓기 위해서 배열을 선언함

        char n_number[] = new char[100];
        
        
        int i = 0;
        while (number > 0) {
            

            //n으로 나눈 나머지를 tmp변수에 저장함

            int tmp = number % n;
            

            //tmp에 들어간 변수가 10보다 크면 아스키코드표로 인해서 'A'+ 알파가 되서

            //B..C...D이런식으로 char타입으로 변환되어서 저장이 된다.

            if(tmp >= 10 && tmp <= 15) {
                n_number[i] = (char) ('A'+ (tmp-10));
                
            }
            else {
                
                n_number[i] = (char) ('0'+tmp);
            }
            number /= n;
            i++;
        }
        
        
        for( ; i>=0; i--) {
        System.out.print(n_number[i]);
        
        }
        
    }
 
}
 
cs



출처


https://www.youtube.com/watch?v=Hdr9eLWz_MU&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=29

:

알고리즘 기초 - 27 ( 달팽이 출력 )

Algorithm/풀었던문제 2019. 12. 29. 14:20



Main.java


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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package Problem27;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        // 입력 n에 따른 달팽이 모양의 숫자를 출력
 
        System.out.println("숫자를 입력하세요.");
 
        int n;
 
        Scanner scan = new Scanner(System.in);
 
        n = scan.nextInt();
 
        // 입력한 숫자 n만큼의 배열을 생성함
        int arr[][] = new int[n][n];
 
        // 배열의 자표를 나타내는 변수 x,y 생성
        int x = 0;
        int y = 0;
 
        // 이 숫자는 배열안에 들어갈 출력될 숫자.
        int num = 1;
 
        // 지금 가는 방향에서 몇번 이동을 할 것인지를 표현하는 변수
        int f = n;
 
        // 4가 입력되었을 경우에 7번 방향을 바꿔서 이동해야되고, 5가 입력 되었을 경우에는
        // 9번 방향을 바꿔서 이동해야되므로 2*n-1까지 범위를 지정한다.
 
        // 그리고 i를 4로 나눈 나머지가 어떤 수이냐에 따라서 switch문을 이용해서
        // 위,아래,왼쪽,오른쪽 방향으로 진행방향을 결정해서 숫자를 출력한다.
        for (int i = 0; i < 2 * n - 1; i++) {
            switch (i % 4) {
            case 0// 오른쪽 이동
                for (int k = 0; k < f; k++) {
                    arr[y][x] = num;
                    x++;
                    num++;
                }
                // 다음에는 y가 1증가해야하므로 y값에 미리 1을 증가시켜 놓는다.
                // 그리고 x의 값이 n+1까지 이동하게 되므로 x-1을 해준다.
                x--;
                y++;
 
                // 아까는 5칸 이동했었어야 되었지만 아래방향은 4칸만 이동하면 되므로
                // f를 1 감소시켜준다.
                f--;
                break;
 
            case 1// 아래쪽 이동
                for (int k = 0; k < f; k++) {
                    arr[y][x] = num;
                    y++;
                    num++;
                }
 
                y--;
                x--;
 
                break;
 
            case 2// 왼쪽 이동
                for (int k = 0; k < f; k++) {
                    arr[y][x] = num;
                    x--;
                    num++;
                }
 
                x++;
                y--;
 
                // 아래에서 위로 갈때는 3회만 진행하면 되므로 다시 1을 빼준다.
                f--;
 
                break;
 
            case 3// 위쪽 이동
                for (int k = 0; k < f; k++) {
                    arr[y][x] = num;
                    y--;
                    num++;
                }
 
                y++;
                x++;
 
                break;
 
            }
 
        }
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                
                System.out.printf("%3d", arr[i][j]);
                
            }
            System.out.println();
        }
 
    }
 
}
 
cs




출력결과








출처


https://www.youtube.com/watch?v=8tjHHJEWkbA&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=28

:

알고리즘 기초 - 26 ( 상수 비교 )

Algorithm/풀었던문제 2019. 12. 29. 10:51


두 가지의 숫자를 int 타입으로 입력받고, 그 숫자를 계속 10으로 나눈 나머지를 String타입의 변수에 문자열로 더하는 식으로 숫자를 뒤집고,


다시 그 String 타입의 변수를 int 타입으로 변환해서 뒤집은 두 수의 대소를 비교하였다.



Main.java


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
76
77
78
79
80
81
82
83
84
85
86
87
88
package Problem26;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        
        //두개의 숫자를 입력받아서 그 숫자를 뒤집어서 숫자를 비교한 후에 대소를 정해서 출력한다.
        
        //String타입으로 변환시켜서 인덱스 자리를 교환하던지, 10으로 계속 나누어서 나머지를 이용해

        //자리를 바꾸던지 해서 숫자를 뒤집은 다음 대소를 판별하면 될 거 같다.
        
        
        //두개의 숫자를 입력
        
        System.out.println("두가지의 숫자를 입력하세요.");
        
        int number_1;
        
        int number_2;
        
        Scanner scan = new Scanner(System.in);
        
        number_1 = scan.nextInt();
        
        number_2 = scan.nextInt();
        
        System.out.printf("입력받은 숫자 : %d %d", number_1, number_2);
        
        
        //위에서 받은 두개의 숫자를 뒤집은 값을 저장할 String 변수
        
        //int타입으로 해버리면 값을 저장할때 더해버리기 때문에 String타입으로 저장해 문자열을 더하는 방식으로 받아야 한다.
        
        //초기값으로 null을 선언하면 다시 int형으로 형변환을 할 때 에러가 발생하기 때문에 공백("")값을 초기값으로 주면 된다.
        
        String r_number_1 = "";
 
        String r_number_2 = "";
        
        
        //각 숫자를 10으로 나누어서 그 나머지를 다시 r_number변수에 저장하는 식으로 앞 뒤 숫자를 바꾸어서 저장해 주었다.
        
        for(int i = 0; i < number_1; i++) {
            
            r_number_1 += number_1 % 10;
            number_1 /= 10;
            
        }
        
        for(int j = 0; j < number_2; j++) {
            
            r_number_2 += number_2 % 10;
            number_2 /= 10;
            
        }
            
        System.out.println("");
        
        
        //다시 숫자의 대소를 비교해주어야 하기 때문에 int형으로 다시 형변환을 한다.
        
        number_1 = Integer.parseInt(r_number_1);
        
        number_2 = Integer.parseInt(r_number_2);
        
        System.out.print("뒤집은 값 : "+number_1+" "+number_2 );
        
        System.out.println("");
        
        //두 수 중에 더 큰 수를 출력
        
        if (number_1 < number_2) {
            
            System.out.print("두 숫자 중 더 큰 수 : "+number_2);
            
        }else if (number_1 > number_2) {
            
            System.out.print("두 숫자 중 더 큰 수 : "+number_1);
            
        }
        
        
    }
 
}
 
cs




출력결과





출처


https://www.youtube.com/watch?v=DH18W_oII6U&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=27



:

알고리즘 기초 - 25 ( 더하기 사이클 )

Algorithm/풀었던문제 2019. 12. 25. 13:00



숫자가 주어졌을 때, 그 숫자의 일의 자리와 십의 자리를 더하고, 더한 숫자의 일의 자리와 더하기 전 숫자의 일의 자리수를 더해서 다음 수를 만든다.


(이것이 1사이클) 이라고 할 때, 총 몇사이클이 나오는지 계산하는 문제



Main.java


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
package Problem25;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        
        //N이 주어졌을 때 N사이클의 길이 구하기
        
        
        //N입력
        
        System.out.println("숫자를 입력하세요.");
        
        int number;
        
        
        
        Scanner scan = new Scanner(System.in);
        
        number = scan.nextInt();
        
        //숫자를 따로 저장해놓음 (반복문 탈출할때 사용하기 위함)
        int re_number = number;
        
        
        //임시변수
        //일의 자리와 십의자리수를 더한 수가 들어가 있음
        int tmp = 0;
        
        
        //최종 사이클의 갯수를 나타내는 변수
        int cnt = 0;
        
        //최소 1회전사이클을 돌려야 하므로 do while를 사용한다.
        
        do {
            
            tmp = re_number / 10 + re_number % 10;
            
            re_number = re_number % 10 * 10 + tmp % 10;
            
            cnt++;
            
        }while(number != re_number);
        
        System.out.println("사이클의 수: "+cnt);
        
    }
 
}
 
cs



출력 결과






출처


https://www.youtube.com/watch?v=fP1UTjZ_Yrw&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=26

: