2020-10-13 아마 자바(java)를 하면서 가장 많이 접하게 되는 속성 두 가지를 뽑자면, String과 Int가 아닐까 생각해본다. 물론 알고리즘 문제를 접할 때도 해당 속성을 자유자재로 바꿀 줄 알아야 하는데, 오늘은 이와 같은 방법으로 알아보도록 하자. 우선 문자열 형태에서 정수형으로 바꾸는 방법을 알아보자. 방법은 간단한데, 아래와 같다. 소스코드 String str = "123"; int number = Integer.parseInt(str); System.out.println(number); 처음에는 바꾸고 싶은 문자열을 설정하고 Integer.parseInt로 형변환을 처리 후 정수형 변수에 넣어주면 간단히 String → Int 형을 바꾸어 진 것을 확인할 수 있다. 다음은 정수형에..
2020-10-08 수학에서 이분법(二分法, Bisection method)은 근이 반드시 존재하는 폐구간을 이분한 후, 이 중 근이 존재하는 하위 폐구간을 선택하는 것을 반복하여서 근을 찾는 알고리즘이다. 간단하고 견고하며 해의 대략적 위치를 안다면 일정 오차 내에 있는 1개의 해는 무조건 도출이 가능하나, 상대적으로 느린 방식이다. 이분법은 근이 존재한다는 것 자체를 전제로 구간을 설정하는 것이므로 근이 존재할 가능성은 100%이므로 방정식이 간단하고 근 자체가 가장 중요한 목적인 경우 가장 적합한 방법이다. 출처 : 위키피디아 위의 정의를 보면 어렵게 느껴질 수 있지만 사실은 간단하다. 각 배열의 크기에서 처음위치과 끝위치을 더한 후 2로 나눈 중간값이 찾고자 하는 값보다 크면 전체 범위를 처음위치..
2020-10-01 알고리즘 문제를 풀다 보면 항상 문제에 대한 입력값이 주어지는데 (Ex) N * M = K) 이러한 입력값을 받기 위해서 Scanner라는 함수를 많이 사용할 것이다. 물론 필자도 Scanner이 사용이 편하고 해당 함수로 입력 함수를 입문을 했기 때문에 조금 더 익숙한 것이 사실이다. (BufferedReader는 선언시 조금 길다..) Scanner scan = new Scanner(System.in); //Scanner 사용전 변수 선언 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader 사용전 변수 선언 (실제로 변수를 선언하는 과정에서는 길이가 두배 정도 차이 난다...
2020-09-28 거품 정렬(Bubble sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O(n2)로 상당히 느리지만, 코드가 단순하기 때문에 자주 사용된다. 원소의 이동이 거품이 수면으로 올라오는 듯한 모습을 보이기 때문에 지어진 이름이다. 양방향으로 번갈아 수행하면 칵테일 정렬이 된다. 오름차순으로 정렬하는 거품정렬의 과정은 다음과 같다 출처 : 위키피디아 링크 : ko.wikipedia.org/wiki/%EA%B1%B0%ED%92%88_%EC%A0%95%EB%A0%AC 소스코드 Scanner scan = new Scanner(System.in); int [] arr = new int [10]; //정렬할 숫자가 들어갈 배열 int n = -1; //입력받을 숫자의 개수가 ..
2020-09-24 삽입 정렬(揷入整列, insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다. k번째 반복 후의 결과 배열은, 앞쪽 k + 1 항목이 정렬된 상태이다. 각 반복에서 정렬되지 않은 나머지 부분 중 첫 번째 항목은 제거되어 정확한 위치에 삽입된다. 그러므로 다음과 같은 결과가 된다. 배열이 길어질수록 효율이 떨어진다. 다만, 구현이 간단하다는 장점이 있다. 선택 정렬이나 거품 정렬과 같은 같은 O(n2) 알고리즘에 비교하여 빠르며, 안정 정렬이고 in-place 알고리즘이다. 출처: 위키피디아 소스코드 Scanner scan = new Scanner(System.in); i..
2020-09-18 소인수분해(영어: prime factorization, integer factorization)는 합성수를 소수의 곱으로 나타내는 방법을 말한다. 소인수분해를 일의적으로 결정하는 공식은 아직 발견되지 않았다. 현대 암호 처리에서 소인수분해의 어려움은 중요한 기준이 된다. 산술의 기본 정리(fundamental theorem of arithmetic)에 의해 모든 양의 정수는 소수들의 곱으로 표현하는 방법이 (곱의 순서를 바꾸는 것을 제외하면) 유일하게 존재한다. 그러나 산술의 기본정리는 그 소인수분해를 하는 방법을 알려주지는 않는다. 단지 존재성을 확인해 줄 뿐이다. 출처 : 위키피디아 소스코드 ※ 기본 알고리즘 원리는 우선 입력받은 값의 제곱근을 구해 [ EX) 10 제곱근 3.xx..