본문 바로가기

ETC/자료구조 , 알고리즘

(6)
에라토스테네스의 체, 소인수 분해 이 글은 공부한 내용을 기반으로 적는 글이오니, 건전한 비판은 언제든 환영합니다. 에르토스테네스의 체 에르토스테네스의 체는 언제 알고리즘을 사용하게 될까? 예를 들면 1~100 까지의 리스트에 담겨있는 정수가 있다. 여기서 문제가 소수는 몇 개인가 확인해야 하는 문제가 주어진다면 단순히 생각하기로는 이중 for문으로 찾을 수 있지만 그러면 너무 시간이 거대하게 걸린다. 하나하나 비교를 하다보면은 불필요한 계산이 행하여 진다. 그래서 어떻게 작성을 할꺼면 먼저 2부터 시작하여서 2의 배수이면 계산이 안들어가고 그 다음에 3의 배수 5의 배수 방식으로 들어간다. import java.util.ArrayList; public class Eratosthenes { public static ArrayList si..
재귀함수 이 글은 공부한 내용을 정리하는 목적으로 적는 글이오니 건전한 비판은 환영합니다. 먼저 함수에 대해서 이야기를 해보자면 1. 값을 입력받아 특정 연산을 수행하는 결과를 반환 예를 들면 public static void main(String[] args){ System.out.println(getResult(3)); } static int getResult(int n){ return n*n; } 위와 같이 어떤 값을 함수에 넣었을 때 그 값을 받아서 어떠한 로직을 처리한 다음에 리턴해주게 되어있다. 2. 함수간의 완변학 분담 예를 들면 public static void main(String[] args){ System.out.println(getResult(3));결과 9 System.out.println..
시간복잡도 이 글은 공부한 내용을 기반으로 정리하는 글이오니 건전한 비판은 환영합니다. 시간 복잡도는 왜 알아야 할까? 같은 프로그램을 작성하였을 때 A라는 사람과 B라는 사람이 하나의 목표를 두고 작성을 하였다. A라는 사람의 프로그램을 실행하였을 때 3초가 걸리고, B라는 사람의 프로그램을 작성을 하였을 때 시간이 10초가 걸린다면 A라는 사람의 프로그램이 빠르기 때문에 1차원 적으로는 A의 시간이 더 빠르다. 시간 복잡도를 아는 방법은 먼저 프로그램을 돌리고 시간을 측정하였을 때, A-Z까지 시간으로 순서를 나누었을 때 일렬적으로 나눠질 수 있다. 즉 같은 입력을 제공하였을 때 어느 프로그램이 가장 빠를 수 있나 측정하는 것이 시간 복잡도이다. 빅 오 표기법 빅오 표기법이란? 시간에 가장 큰 영향을 주는 시간..
프로세스와 쓰레드 이 글은 공부하는 내용을 정리하는 목적으로 작성하는 글이오니, 건전한 비판은 언제든 환영합니다. 프로세스와 쓰레드를 정확히 알아야 하는 이유? 먼저 RxSwift를 공부하기 위해 RxSwift는 비동기를 지원하는 라이브러리이다. 근데 왜 비동기를 무조건적으로 해야할까?에 대한 물음이 먼저였다. 회사에서도 개발자가 나 혼자다 보니, 그런 것을 생각하기 보다는 단순히 비동기는 여러작업을 같이 하는 것이다.라는 정의만 내렸고, 깊이 생각하지는 않았다. 코어 왜 먼저 코어와 쓰레드를 이야기 하냐면, 먼저 컴퓨터의 역사를 알고 개념이 더욱 명확해 질 것이기 때문에 먼저 적는다. 요즘 들어보면 4코어 8쓰레드, 8코어 16쓰레드라고 컴퓨터를 사기 전에 보는 글일 것이다. 예전에는 단일 CPU가 모든 작업을 시분할 ..
기본정렬 이 글은 공부한 내용을 기반으로 정리하는 글이오니 건저한 비판은 언제든 환영합니다. 기본적으로 기본정렬은 선택정렬, 삽입정렬, 버블정렬 이렇게 3가지라고 생각합니다. 그렇다면 정렬은 무엇일까요? 정렬이란? 제가 생각하는 정렬이라고 생각하는 정의는 기준점을 잡고 차례대로 순서를 나열하는 것이라고 생각합니다. 예를 들면 오름차순으로 정렬한다는 것은, 숫자로 설명을 하면 1,2,3,4,5........ 식으로 낮은 숫자부터 높은 숫자로 나열하는 것 입니다. 이렇듯이 기준을 잡고 나열 하는 것을 정렬이라고 생각합니다. 선택정렬이란? 먼저 선택정렬에 대해서 설명을 하겠습니다. 선택정렬이라고 하는 것은 '|'앞은 정렬이 완료가 된 것 입니다. 이게 무슨 이야기냐면, 이제 설명 드리겠습니다. 저는 오름차순으로 숫자를..
완전탐색 완전탐색이란 무엇인가? 완전탐색이라는 것은 모든 것을 다 찾아본다는 이야기이다. 예를 먼저 들어보는게 가장 설명하기가 쉬울것 같아서 예를 먼저 설명하겠습니다. //10개의 상자와 1개의 사과가 있습니다. 이 중에 1개의 사과를 10개의 상자 중에 한 군데에 감추었습니다. //이 때 1개의 사과가 있는 상자를 찾으세요 위와 같은 질문에는 가장 단순한 방법은 한 개씩 상자를 오픈하면서 찾아봅니다. 물론 이 글을 보는 사람에게는 이거보다 ‘이진 탐색’으로 찾는게 더 빠르지라고 이야기 할 수 있겠지만 이 글은 완전탐색을 설명하기 위한 글입니다. ^^ 조금만 참아주세요. 다시 한번 이야기하자면 쉽게 한 개씩 다 찾아보겠습니다. 코드로 설명하자면 public static void main(String[] args)..