Algorithm27 [Java] 순차 탐색, 이진 탐색의 개념과 예제 서론 이번 포스팅에선 순차 탐색과 이진 탐색의 개념에 대해 알아보고 간단히 Java로 구현해볼 예정입니다. 바로 시작하겠습니다. 순차 탐색(Sequential Search)이란? 탐색은 여러 데이터 중에서 원하는 데이터를 찾아내는 것을 의미한다. 순차 탐색은 데이터가 담겨있는 배열을 맨 앞부터 하나씩 비교하여 원하는 데이터를 찾는 방법을 말한다. 순차 탐색 구현 public class SequentialSearch { public static void main(String[] args) { ArrayList list = new ArrayList(); for(int i=0; i 중간 값) [True] 뒷 부분의 서브 리스트에서 검색할 숫자를 찾는다. if(검색할 숫자 < 중간 값) [True] 앞 부분의 .. Algorithm/Concept 2022. 7. 13. [Java] 고급 정렬 - 퀵 정렬이란? (개념 / 예제 / 알고리즘 분석) 서론 이전 병합 정렬에 이어 고급 정렬에 속한 퀵 정렬, 흔히 정렬 알고리즘의 꽃이라 불리는 이 포스팅을 마지막으로 정렬 알고리즘에 대해 마무리하려합니다. 바로 알아보겠습니다. 퀵 정렬(Quick Sort)이란? 분할 정복 알고리즘 중 하나인 고급 정렬 알고리즘이며, 평균적으로 매우 빠른 수행 속도를 갖고 있는 정렬 방법을 말한다. 퀵 정렬의 구현 방식을 알아보면 다음과 같다. 구현 방식 기준점(Pivot)을 정해서, 기준점보다 작은 데이터는 왼쪽(left), 큰 데이터는 오른쪽(right)으로 모으는 함수를 작성한다. 각 왼쪽(left)과 오른쪽(right) 배열은 재귀용법을 사용하여 다시 동일 함수를 호출하여 위 작업을 반복한다. 함수는 왼쪽(left) + 기준점(pivot) + 오른쪽(right)을.. Algorithm/Concept 2022. 7. 13. [Java] 고급 정렬 - 병합 정렬이란? (개념/ 예제/ 총 정리) 서론 이번 글에서는 고급 정렬 알고리즘에 속한 병합 정렬을 예제를 통해 알아보도록 하겠습니다. 병합 정렬(Merge Sort)이란? 병합 정렬은 재귀 용법을 활용한 정렬 알고리즘을 말한다. 구현 방식은 다음과 같다. 구현 방식 (위 이미지 참고) 리스트를 절반으로 잘라 비슷한 크기의 두 개의 리스트로 나눈다. 각 리스트를 재귀적으로 합병 정렬을 이용하여 정렬한다. 두 리스트를 다시 하나의 정렬된 리스트로 병합한다. 위와 같이 방식을 3 Step으로 나누어 구현할 수 있다. 이 방식을 토대로 아래의 예제 문제를 풀어보자. 예제 구현 방식에서 1번 항목인 하나의 리스트를 두 개의 리스트로 나누는 것부터 구현을 해보면 다음과 같이 짜볼 수 있다. 두 개의 리스트로 나눠보기 public class Split {.. Algorithm/Concept 2022. 7. 12. [Java] 동적 계획법과 분할 정복이란? (개념/ 공통점/ 차이점/ 예제) 서론 알고리즘 공부를 하면 안들어 볼 수 없는 동적 계획법(Dynamic Programming)과 분할 정복의 개념에 대해 알아보려합니다. 이번 포스팅에선 두 개념 중 동적 계획법에 초점을 더 맞추어 작성할 예정이고 이 후 고급 정렬 알고리즘 공부를 할 때 분할 정복에 대해 다시 한번 작성해볼 예정입니다. 동적 계획법(Dynamic Programming)이란? 보통 DP라고 불리는 이 동적 계획법은 다음과 같이 정의할 수 있다. 입력 크기가 작은 부분 문제들을 해결한 후 해당 부분 문제의 해를 활용하여, 보다 큰 크기의 부분 문제를 해결하고 최종적으로 전체 문제를 해결하는 알고리즘 특징 상향식 접근법으로 가장 최하위 해답을 구한 후, 이를 저정하고 해당 결과값을 이요해서 상위 문제를 풀어가는 방식을 말한.. Algorithm/Concept 2022. 7. 12. [Java] 백준 1, 2, 3 더하기 - 9095번 (재귀 용법 사용 / 풀이 방식) 서론 해당 문제는 DP로 분류되어있지만 재귀용법에 대한 학습을 위해 재귀 함수를 사용하여 풀이하였습니다. 문제 문제 풀이 import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for(int i = 0; i< num; i ++){ int N = sc.nextInt(); System.out.println(recursion(N)); } } private static int recursion(int n){ if(n == 1) { return 1; }else if(n == 2){ return 2; }else.. Algorithm/Problem Solving 2022. 7. 11. [Java] 재귀 용법(recursive call)의 개념과 사용 방식 (예제 / 문제 풀이) 서론 이번 포스팅에선 재귀용법의 개념과 예제를 통해 사용 방식에 대해 학습해보려한다. 바로 알아보자 재귀 용법(recursive call)이란? 함수 안에서 동일한 함수를 호출하는 형태를 말한다. 여러 알고리즘 풀이 시 자주 사용되므로 꼭 알고 넘어가야하는 것 중 하나이다. 재귀 호출은 스택 형식을 갖는다. 위와 같이 재귀 함수는 내부적으로 스택 형식으로 관리된다. 재귀 호출의 일반적인 형태는? 예제를 들어가기 앞서 코드 레벨로 기본적인 재귀 형태에 대해서 알아보자 [형태1] function(입력) { if (입력 > 일정값) { // 입력이 일정 값 이상이면 return function(입력 - 1); // 입력보다 작은 값 } else { return 특정값; // 재귀 호출 종료 } } [형태2] .. Algorithm/Concept 2022. 7. 11. 백준 JAVA 10870번 - 피보나치수 5 문제는 BufferedReader를 이용하여 풀었고 기본적인 재귀함수 개념만 알고있다면 쉽게 풀 수 있는 문제라고 생각한다. 그렇기에 장황한 설명은 생략한다. 문제 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws NumberFormatException, IOException { int num = Integer.parseInt.. Algorithm/Problem Solving 2022. 3. 8. 백준 JAVA 10872번 - 팩토리얼 쉬운 기초 문제이니 코드만 올리도록 하겠다. 방법은 Scanner와 BufferedReader 두가지 방법을 이용했다. 1. BufferedReader를 이용한 풀이 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws.. Algorithm/Problem Solving 2022. 3. 8. 프로그래머스 C# - 소수 만들기 (Summer/Winter Coding) 서론 이번에 푼 문제는 소수값을 구하는 방법과 배열에 대한 지식만 있다면 간단히 풀 수 있을만한 문제라고 생각한다. 다른 사람들의 풀이를 보니 정말 접근자체를 다르게 한사람들도 있어 조곰 신기하긴했다. 아직은 알고리즘 초보기에 꾸준히 노력하여 좋은 답안을 낼 실력을 갖춰야겠다. 문제 풀이 using System; class Solution { public int solution(int[] nums) { int answer = 0; for (int i = 0; i k)) continue; if (IsPrime(sum)) answer++; } } } return answer; } //소수 값인지 확인 public static bool IsPrime(int n) { bool isBool = true; for .. Algorithm/Problem Solving 2022. 2. 21. [Algorithm] 선택 정렬(Selection Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 선택정렬이다. 바로 선택정렬의 개념부터 알아보자. 선택정렬이란? 첫번째 인덱스부터 모든 인덱스를 검사하여 최소값을 찾아 정렬하는 방식이다. 그렇기 때문에 입력된 데이터가 정렬이 되어있건, 역순이건, 반쯤 정렬이 되어있건 모두 같은 시간이 걸리게된다. 따라서 이 정렬의 시간복잡도는 O(n^2)가 되고 데이터 수가 커지면 커질수록 실행시간은 제곱으로 늘어나게 되는 형식인 것이다. 아래의 참고 이미지를 보면 이해가 쉽게 갈 것이라 생각한다. 위의 참고 이미지처럼 끝까지 한번 돌고 최소 값을 찾아 교환(swap)하는 형식이다. 이런 방식의 장점고 단점에 대해서도 알아보자. 장점 코드 구현이 쉽다. 정렬이 진행됨에 따라 속도는 빨라지는 속성을 갖고있다. 버블 정렬.. Algorithm/Concept 2021. 12. 29. [Algorithm] 삽입 정렬(Insertion Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 삽입정렬이다. 바로 삽입정렬의 개념부터 알아보자. 삽입정렬이란? 배열 값 중에서 비교할 키 값을 정해놓고 맨 앞 인덱스부터 하나씩 비교 키 값과 비교하여 작은 수를 앞으로 옮기는 방식이다. 풀어서 얘기하면 삽입정렬은 1번 인덱스부터 시작을 하며 2개의 수를 비교하여 배열 사이에 변수를 삽입하여 정렬하는데 이렇게 정렬을 하다보면 비교한 숫자보다 왼쪽으로 자신이 더 크면 그냥 원래 자리에 있는 방식이라서 순차적으로 계속 진행하면 정렬이 되는 형식이다. 아래의 참고 사진을 보면 이해에 도움이 될것이다. 위의 사진을 보면 알 수있듯 키값을 정해두고 비교해가며 정렬해가는 방식인 것이다. 이제 삽입정렬의 장 단점을 알아보자. 장점 비교적 쉬운 코드로 구현이 가능하다.. Algorithm/Concept 2021. 12. 29. [Algorithm] 버블 정렬(Bubble Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 버블정렬이다. 바로 버블정렬의 개념부터 알아보자. 버블정렬이란? 인접한 값을 순차적으로 계속 비교하여 위치를 바꾸면서 최대, 최소값을 구해가는 정렬 방식이다. 다시 말해, A>B or AB, 내림차순으로 정렬을 하고싶다 하면 A arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } /// /// Print 함수 /// /// static void Print(int[] arr_val) { for (int i = 0; i < arr_val.Length; i++) { Console.Write(arr_val[i].ToString() + "\t"); } } } } Algorithm/Concept 2021. 12. 29. 이전 1 2 3 다음 💲 많이 본 글