'Algorithm'에 해당되는 글 40건

  1. 2019.12.10 알고리즘 기초 - 8 (팩토리얼[!])
  2. 2019.12.09 알고리즘 기초 - 7 (소수 판별)
  3. 2019.12.07 알고리즘 기초 - 6 (최대 공약수 구하기)
  4. 2019.12.04 알고리즘 기초 - 5 (대, 소문자 변환)
  5. 2019.12.04 알고리즘 기초 - 4 (10진수를 2진수로 변환)
  6. 2019.12.03 알고리즘 기초 - 3 (최빈수 출력)
  7. 2019.12.03 알고리즘 기초 - 2 (파보나치 수열 출력)
  8. 2019.11.30 알고리즘 기초 - 1 (학생이름 저장 및 검색)

알고리즘 기초 - 8 (팩토리얼[!])

Algorithm/풀었던문제 2019. 12. 10. 15:31



  팩토리얼 (!) 이란?


  특정한 수를 받으면 1부터 그 숫자까지를 하나씩 곱해서 나오는 숫자이다.


  ex ) 5를 입력 받았을 시에 5!이라고 표현하고,  1 * 2 * 3 * 4 * 5를 해서 120이 나오게 된다.





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
package Problem8;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
 
        // 숫자를 입력받음
 
        while (true) {
            System.out.println("숫자를 입력하세요.");
 
            // 입력받는 수
            int a;
 
            // total값은 for문을 계속 돌려서 곱해야하기때문에 초기값으로 1을 준다.
            int total = 1;
 
            Scanner scan = new Scanner(System.in);
 
            a = scan.nextInt();
 
            // 팩토리얼은 특정한 수를 받으면 1부터 그 숫자까지를 하나씩 곱해서 나오는 수이다.
 
            // ex)5를 입력받음 , 5! = 1 * 2 * 3 * 4 * 5
 
            // 1은 곱해봤자 자기랑 같은 수가 나오기 때문에 2부터 시작함 (어차피 초기값도 1로 주었음)
            for (int i = 2; i <= a; i++) {
 
                total *= i;
 
            }
 
            System.out.println("팩토리얼 (!) 정답 : " + a + "! = " + total);
 
            System.out.println();
 
        }
    }
}
 
cs




출력 결과





출처


https://www.youtube.com/watch?v=7wIUlCM8v9k&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=9


:

알고리즘 기초 - 7 (소수 판별)

Algorithm/풀었던문제 2019. 12. 9. 15:47


소수란?


1과 자기자신으로만 나누어 떨어지는 수.


ex) 3, 5, 7, 13 ......



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 Problem7;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
    
    for(int a1 = 0; ; a1++) {
        
        
        System.out.println("숫자를 입력하세요.");
        int a;
        Scanner scan = new Scanner(System.in);
        a = scan.nextInt();
    
        //소수일경우 boolean변수의 값을 변경해서 표시하게 하려고 초기값은 true값을 준다.
        boolean isPrimnumber = true;
    
    //1과 자기자신으로만 나누어 떨어지는 수가 소수이기 때문에 2부터 시작하고 자기자신 -1 만큼 i값을 증가시키는 반복문을 돌려서 나누어준다.
    for(int i = 2; i <= a -1; i++) {        
    
    //소수는 1과 자기자신으로만 나누어 떨어지는 수
    if (a % i == 0) {
    
        isPrimnumber = false;
        
    }else if (a % 1 == a && a % a == 1){
        
        isPrimnumber = true;
        
    }
        }
    
    if (isPrimnumber == false) {
        
        System.out.println(a+"는 소수가 아닙니다.");
        
        }else if(isPrimnumber == true) {
            
            System.out.println(a+"는 소수입니다.");
            
            }
    
    System.out.println();
    
        }
    }
}
 
cs




출력결과





출처


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

:

알고리즘 기초 - 6 (최대 공약수 구하기)

Algorithm/풀었던문제 2019. 12. 7. 12:24

최대 공약수란 ?

 

2개 이상의 수의 공통된 약수 중에 가장 큰 수 이다.

 

EX ) 10의 약수 : 1, 2, 5, 10

  15의 약수 : 1, 3, 5, 15

 

10과 15의 공약수 : 1, 5

 

10과 15의 최대 공약수 = 5

 

 

 

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
import java.io.IOException;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] str) throws IOException {
 
    int a = 12;
    
    int b = 18;
    
    //  두 수 중에 어느수가 클지 알 수 없으므로 small과 big 변수를 만들어 
    //  큰 수와 작은 수를 따로 저장해준다.
    
    int small;
    int big;
    
    if(a > b){
        
        big = a;
        small = b;
        
    }else if (b > a) {
        
        big = b;
        small = a;
        
    }
    
    //gcd는 두수를 각각 나누어서 0이 나오는 수 (공약수)
    
    int gcd = 1;
    
    for (int i = 1; i <= small; i++){
        
        if (big % i == 0 && small % i == 0){
            
            gcd = i;
           
            }
    System.out.println("두수의 최대 공약수는 ?"+i);
        }
    }
}
 
 
cs

 

 

 

 

출처

 

https://www.youtube.com/watch?v=jdnGckTvZ64&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=7

 

 

:

알고리즘 기초 - 5 (대, 소문자 변환)

Algorithm/풀었던문제 2019. 12. 4. 15:47



문자를 하나씩 배열에 넣고, 대문자인지 소문자 인지 확인한 후에 


대문자는 소문자로, 소문자는 대문자로 변경하면 된다.


아스키코드표를 참고하면 소문자의 아스키 코드 (숫자) 범위는 97~122까지 이고, 대문자는 65~90까지이다.


즉, 대문자에서 32를 더하면 소문자가 되고, 소문자에서 32를 빼면 대문자로 변경하는 것이 가능하다는 뜻이다.




- 아스키 코드표 -




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
package Problem5;
 
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
    
    System.out.println("문자를 입력하세요.");    
    
    Scanner scan = new Scanner(System.in);
    
    String a = scan.nextLine();
    
    System.out.println("내가 입력한 문자 : "+a);    
    
    char []arr;
    
    //String 타입의 메소드인 CharArray 메소드를 사용해서 char타입으로 변환해서 배열에 넣는다.
    //이렇게 하면 배열의 한 요소당 문자를 넣어서 접근할 수 있게 된다.
    arr = a.toCharArray();
    
    //문자를 하나씩 배열에 넣고, 대문자인지 소문자 인지 확인한 후에 대문자는 소문자로,
    //소문자는 대문자로 변경하면 된다.
    //아스키코드표를 참고하면 소문자의 아스키 코드 (숫자) 범위는 97~122까지 이고, 대문자는 65~90까지이다.
    
    //즉, 대문자에서 32를 더하면 소문자가 되고, 소문자에서 32를 빼면 대문자로 변경하는 것이 가능하다는 뜻이다.
    
    for (int i = 0; i < arr.length; i++) {
        
        if(arr[i] <= 90 ) {
            
            arr[i] = (char) (arr[i]+32);
            
        }else if(arr[i] >= 97){
            
            arr[i] = (char) (arr[i]-32);
            
        }
        
        
    }
    
    System.out.print("대 소문자 변환한 문자 출력 : ");
    //변환한 문자를 출력해보기
    for (int i = 0; i < arr.length; i++) {
    
    System.out.print(arr[i]);
    
        }
    }
}
 
 
cs




출력 결과




출처


https://www.youtube.com/watch?v=DTEiENYVR14&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=6

:

알고리즘 기초 - 4 (10진수를 2진수로 변환)

Algorithm/풀었던문제 2019. 12. 4. 11:07



10진수를 2진수로 변환할때는 Integer클래스를 사용하면 편리하게 진수 변환을 할 수 있다.



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
package Problem4;
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
    
    
    //10진수를 2진수로 변환하기
    for(int i = 0; ; i++) {
    System.out.println();
    System.out.println();
    
    System.out.println("변환할 10진수를 입력하세요.");
    Scanner scan = new Scanner(System.in);
    int a = scan.nextInt();
    
    System.out.println("내가 입력한 10진수 : "+a);
    
    int[] arr = new int[50];
    arr[0= a;
    
    //10진수를 2진수로 변환할때는 Integer클래스의 API를 활용하면 편하게 변환할 수가 있다.
    String a2 = Integer.toBinaryString(arr[0]);
    
    System.out.println("10진수를 2진수로 변환한 숫자 : "+a2);
    
    
    
        }
    }    
}
 
 
cs




출력 결과




출처

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



:

알고리즘 기초 - 3 (최빈수 출력)

Algorithm/풀었던문제 2019. 12. 3. 15:53

.



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
package Problem3;
 
public class Main {
 
    public static void main(String[] args) {
 
        // 내 생각
        // 수 전체를 배열안에 넣고,
        // 배열안에 있는 숫자를 같은 숫자마다 카운팅해서 숫자를 세면 될거같다.
        // 많이 나온 숫자들을 비교해야되는데 잘 안됨
 
        int[] arr = { 1223142243532 };
        

//배열을 하나 더만들어서 위에 있는 배열의 최빈수와 최빈수가 나온 횟수도 같이 저장한다.
        int[] mode = new int [10];
        
        //index => 나온 해당 숫자
        //index 값 => index (출현횟수)가 몇번 나왔는지 저장하는 용도
        
        //"mode[3] = 5, => 3번숫자가, 5번 출현했다."
        
        for (int i = 0; i < 10; i++) {
 
                mode[arr[i]]++;
 
            }
        
        
        int modeNum = 0;    //최빈수
        int modeCnt = 0;    //최빈수가 나온 횟수
        
        for (int i = 0; i < 10; i++) {
            if (modeCnt < mode[i]) {
                modeCnt = mode[i];
                modeNum = i;
            }
        }
        
        System.out.println("최빈수는:"+modeNum+"  "+"횟수는 :"+modeCnt);
    }
}
 
cs



출력 결과





출처


https://www.youtube.com/watch?v=C-HElAETJVo&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=4

:

알고리즘 기초 - 2 (파보나치 수열 출력)

Algorithm/풀었던문제 2019. 12. 3. 14:26




파보나치 수열은 뒤에 있던 수가 앞의 수가 되고, 앞의 수와 뒤의 수를 더한 값이 뒤의 수가 된다.


첫번째항  = 1


두번째항  = 1


세번째항 = 첫번째항(1) + 두번째항(1) = 2


네번째항 = 두번째항(1) + 세번째항(2) = 3


.......


ex) 1 1 2 3 5 8 13 .....




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
package Problem2;
 
 
import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
    
        //파보나치 수열 : 앞에 두수의 합이 세번째 항의 숫자가 된다.
        
        //0과 1로 주로 시작하며, 뒤에 있던 수가 앞의 수가 되고, 앞의 수와 뒤의 수를 더한 값이 뒤의 수가 된다.
        
        
          Scanner scan = new Scanner(System.in);
          
          int a = 1, b = 1, temp;
          
          int i;
          
          System.out.println("몇번째 항까지 출력할까요??"); i = scan.nextInt();
          
          for(; i>=1; i--) {
          
          System.out.print(a+" ");
          
          temp = a+b; a = b; b = temp;
          
          }
          
          System.out.println();
          
          System.out.println();
          
          
          
          System.out.println("배열을 사용하는 방법");
        
        
        //2번째 방법 (배열을 사용하는 방법)
          
        //3번째 항부터 공식 (arr[j] = arr[j-1] + arr[j-2];) 이 적용되기 때문에
          
        //1항과 2항에는 값을 1로 초기화 해주어야 한다.
 
        int []arr = new int[100];
        
        arr[1= 1;
        
        arr[2= 1;
        
        
        for (int j = 3; j < 10; j++) {
            
            arr[j] = arr[j-1+ arr[j-2];
            
            
        }
        
        for (int j = 1; j < 10; j++) {
            
            
            System.out.print(arr[j]+" ");
            
            
        }
        
    }
 
}
 
cs




출력 결과




출처

https://www.youtube.com/watch?v=WpzjpKt0lbc&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=3


https://enter.tistory.com/88

:

알고리즘 기초 - 1 (학생이름 저장 및 검색)

Algorithm/풀었던문제 2019. 11. 30. 15:53



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
package Problem1;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] str) {
 
        // Student클래스에 인스턴스를 생성한 후에 값을 집어넣는다.
 
        Student a = new Student("이름11"1122);
        Student b = new Student("이름22"3344);
        Student c = new Student("이름33"2111);
 
        // 학생들의 개인정보를 arrayList에 저장하기위해서 Student타입의
        // ArrayList타입의 리스트의 인스턴스를 생성한다.
 
        ArrayList<Student> list = new ArrayList<Student>();
 
        //리스트에 자료를 넣을때는 add()메소드를 사용해서 넣는다.
        list.add(a);
        list.add(b);
        list.add(c);
 
        Scanner scan = new Scanner(System.in);
 
        while (true) {
            System.out.println("계속 검색을 하고 싶으시면 y, 종료하고 싶으면 n");
            String input = scan.next();
            if (input.equals("y")) {
 
                System.out.println("검색시작");
                System.out.println("이름을 입력하세요.");
                
                //boolean 타입의 변수를 사용해서 초기값은 false로 하고 입력한 사람에 대한 번호가 존재할 경우에은 true로 값을 변경한다.
                
                boolean flag = false;
 
                String name = scan.next();
 
                // boolean 타입 변수를 사용해서 해당하는 학생 이름이 없을때에 "번호가 없는 회원으로 출력되게 한다."
                // for문을 사용해서 list에 담긴값들을 student 타입의 str1변수에 저장한다.
                for (Student str1 : list) {
 
                    if (str1.getName().equals(name)) {
 
                        System.out.println("번호 : " + str1.getNo());
                        flag = true;
 
                    }
                }
                if (!flag) {
 
                    System.out.println("번호가 없는 회원입니다.");
 
                }
 
            }
 
            else if (input.equals("n")) {
 
                System.out.println("검색을 종료합니다.");
                break;
            }
 
        }
 
    }
}
 
cs



Student.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
package Problem1;
 
public class Student {
    
    //이름과 학번을 가져야되므로 name와 no변수를 생성한다.
    
    //그리고 자료를 넣었다가 빼야하므로 getter과 setter을 생성하고, 생성자도 생성한다.
    
    //보통 변수는 보통 private타입을 많이 사용한다.
    
    private String name;
    
    private int no;
    
    public Student(String name, int no) {
        super();
        this.name = name;
        this.no = no;
    }
    
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getNo() {
        return no;
    }
 
    public void setNo(int no) {
        this.no = no;
    }
 
}
 
cs



출력결과






출처

https://www.youtube.com/watch?v=w023dXv03nk&list=PLVoihNyHW4xkm_KJ8_N8X7F6EQP4uSRyR&index=2

: