본문 바로가기

computer science/알고리즘17

[알고리즘] 소인수분해 소인수 분해란 숫자n을 소수의 곱으로만 나타낸 것을 소인수 분해라고 합니다. 20의 경우 2,2,5로 소인수 분해를 할 수 있습니다. 이것을 코드로 한번 옮겨 보겠습니다. import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for(int i=2;n>1;){ if(n%i==0){ System.out.println(i); n/=i; }else{ i++; } } } } 20을 4x5, 2x10으로 나눌 수 있지만 이는 결국 2x2x5가 됩니다. 이 말은, 소수중에 가장 작은 2로 나눌 수 있을 떄 까지 나누.. 2019. 5. 18.
[알고리즘] 에라토스테네스의 체 소수는 1보다 큰 자연수 가운데 1과 자기 자신만을 약수로 가지는 수를 뜻한다. 7의 경우 자기자신(7)과 1을 약수로만 가지기 때문에 소수이지만, 4의 경우 자기자신(4)와 1 이외에도 2라는 약수를 포함하기 때문에 소수가 아니다. 그렇다면 만약 20이하의 숫자중에서 소수를 구하는 방법을 어떻게 코드로 옮길 수 있을까 ? 아이디어는 20이하의 숫자 n을 검사하면서, 2부터 n-1까지 수 중에서 n을 나누었을 때 나머지가 0인 숫자가 존재하면 해당 숫자는 소수가 아니게 된다. import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n =.. 2019. 5. 18.
[알고리즘] 버블정렬(Bubble Sort) 저번시간에 이어 이번시간에는 버블 정렬에 대해 알아보겠습니다. 다들 알다시피 버블은 거품입니다. 원소들을 정렬하는데 그 이동하는 모습이 거품이 수면으로 올라오는 듯한 모습으로 보이기 떄문에 버블정렬이라고 지어졌습니다. 버블정렬은 인접한 두 원소의 값을 비교하여 큰 값을 오른쪽으로 하나씩 옮기는 방법입니다. 그래서 처음부터 끝까지 한번 반복했을 때, 가장 큰 값이 오른쪽에 정렬되게 됩니다. 마찬가지로 이번 시간에도 선생님이 버블정렬 방식으로 영호(175),호진(178),태경(180),웅광(167),동욱(173) 5명의 학생들을 키 순서대로 줄을 세울 생각입니다.  먼저 태경이와 동욱이를 비교합니다. 태경이가 더 크네요. 동욱이와 자리를 바꿔줍니다. 태경이와 영호를 비교합니다. 태경이가 더 크네요. 영호와.. 2019. 4. 26.
[알고리즘] 삽입정렬(Insertion Sort) 저번시간의 선택정렬에 이어서 이번시간에는 삽입정렬에 대해서 알아 보겠습니다. 사실 이름만 보아도 대충 어떤식으로 돌아가는지 알 수 있습니다. 삽입정렬은 원소를 정렬되어 있는 구역의 알맞은 위치에 삽입하는 정렬방식입니다. 1 3 5 7 11 라는 정렬되어 있는 구역이 있고 그 다음 숫자가 2일 때 2의 들어갈 위치, 1과 3사이에 삽입해주면 됩니다. 이번 시간에도 마찬가지로 운동장에서 선생님이 학생들을 키 순으로 줄을 세울건데, 삽입정렬 방식으로 영호(175),호진(178),태경(180),웅광(167),동욱(173) 5명의 학생들을 키 순서대로 줄을 세울 생각입니다. 여기서 화살표는 현재 기준학생, "[]"표시는 이미 정렬되어 있는 학생들 구역이라고 생각하시면 됩니다. 기준 학생을 정렬되어 있는 구역의 적.. 2019. 4. 25.