본문 바로가기
반응형

전체 글202

[자료구조] 배열 vs List 비교하기 배열(Array) 이란 ? 여러 데이터를 하나의 이름으로 그룹핑해서 관리 하기 위한 자료구조 배열의 인덱스는 유일무이한 값 식별자 배열의 특징 크기가 정해져있다. 데이터를 메모리에 순차적으로 나열가능 인덱스를 활용하여 검색에 최적화 되어있다. 저장될 때 인접한 Memory 또는 Memory에 연이어 저장된다. Stack 영역에 메모리 할당 배열의 단점 크기를 수정할 수 없다. 배열은 인덱스에 따라 값이 유지되기때문에 엘레먼트가 삭제되어도 메모리는 차지한다. 삽입, 삭제시 비용이 많이 들 수 있다. List란 ? 빈틈없는 데이터의 적재라는 장점을 취한 데이터 스트럭쳐 List의 특징 데이터간의 순서가 존재한다. 인덱스는 몇번째 데이터인가 정도의 의미이다. 빈 엘레먼트를 허용하지 않는다. 크기가 정해져있지 .. 2020. 2. 10.
[알고리즘] 이진탐색트리(BST) 란 ? 이진탐색트리(BST)란? 최대 2개의 자식노드를 가지는 트리 그 하위도 이진탐색트리의 구조를 가진다. 각 노드에는 값이있으며 값사이에는 전순서가 있다. 중복값을 허용하지 않는다. 이진탐색트의 연산 삽입 삭제 검색 이진탐색의 예시 이진탐색트리(BST)의 구현 public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int size=sc.nextInt(); BSTMethod bstMethod = new BSTMethod(); BST root=null; for(int i= 0;i data) { child = insertPreNode(node.preNode, data); node.preNode = .. 2020. 2. 9.
[알고리즘] 너비우선탐색(BFS) 이란 ? 너비우선탐색(BFS) 이란? Breadth First Search의 약자 어떠한 노드에서 인접한 노드들부터 순차적으로 방문하는 탐색방법 장점 최단경로를 보장한다. 단점 경로가 길 경우에는 많은 기억공간을 요구한다. 무한그래프의 경우 해가 없는경우에는 찾지도, 끝내지도 못하는 상황이 발생할 수 있다. 유한그래프의 경우 해가 없는 경우에 모든 그래프를 탐색한 후 실패로 끝난다. 깊이우선탐색(DFS)보다 구현이 복잡하다. 사용사례 최단경로를 찾고 싶을때 실행순서 예시 구현코드 public class Main { public static void main(String[] args) { int size; int command; Scanner sc = new Scanner(System.in); size = sc.n.. 2020. 2. 7.
[알고리즘] 깊이우선탐색(DFS)이란 ? 깊이우선탐색(DFS)이란? Depth First Search 그래프의 탐색방법중 한 가지로 시작한 노드에서 최대한 깊숙히(더 이상 갈곳이 없을때까지)탐색한 후 원점으로 돌아와서 다른 노드들을 탐색하는 방법입니다. 깊이우선탐색의 특징 자기 자신을 호출하는 순환 알고리즘 어떤 노드를 방문했는지를 반드시 체크해야한다. 체크하지 않으면 무한루프에 빠질 수 있다. 장점 구현이 간단하다. 현재 경로상의 노드만 기억하면 되므로 저장공간이 적게든다. 목표노드가 깊은곳에 있을경우에 빠르게 찾을 수 있다. 단점 단순 검색속도는 너비우선탐색보다 느리다. 해가 없는경우에 깊이 빠질 수 있다. 구한 경로가 최단경로가 아닐 수 있다. 실행순서 예시 구현 코드 import java.util.Scanner; public class .. 2020. 2. 5.
[알고리즘] 큐(Queue)란 ? 큐(Queue)란 ? - 제일 먼저 입력된것이 제일먼저 나오는 자료구조 (FIFO) 큐(Queue)의 연산 추가 : 큐의 제일 끝에 데이터를 추가한다. (구현부에서는 push로 구현) 삭제 : 큐의 제일 처음에 있는 데이터를 삭제한다. (구현부에서는 pop으로 구현) peek() : 큐의 제일 처음에 있는 데이터를 반환한다. (구현부에서는 front로 구현) isEmpty() : 비어있는지 검사한다. (구현부에서는 empty로 구현) 큐(Queue)의 구현 import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Qu.. 2020. 2. 4.
[Spring boot Security] "/" 입력시 Login 페이지로 이동 안하는 문제점 Spring boot는 기본적으로 해당 의존성을 추가하면 기본값으로 "/" 입력시 login 페이지로 이동한다. 그러나 가끔가다가 정상적으로 작동하지않을때가 있다. 그럴때 Maven이면 Maven Reimport, Gradle이면 Gradle Reimport 하면된다. 이 글에서는 Maven이므로 Maven으로 진행해보도록 하겠다. Maven클릭해준다. "/" 입력시 login 페이지로 이동하지 않는분들은 Dependencies에 빨간항목이 없을것이다 새로고침 버튼을 누르면 정상적으로 Import가 되는것을 볼 수 있을것이다. 위의 과정을 문제없이 진행했다면 해당페이지를 볼 수 있을것이다. 2020. 2. 3.
[인프런] 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 제목 : 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한님) 강의를 듣는 목적 JPA의 개념 JPA를 올바르게 사용하는 방법 JPA 활용팁 후기 필자는 JPA를 이용하여 간단한 게시판을 만들어본 후에 내가 제대로 이용하고 있는것인지 궁금하였다. 생각해본결과 제대로 이용하는것인지 알려면 기초를 탄탄하게 알아야 된다고 생각했다. (뭐든지 기초가 중요하다고 생각한다) 그래서 찾게된것이 김영한님의 JPA프로그래밍책이었다. 책을 기반으로 한 강의가 있길래 결제하였다. 혼자서 책을 보는것보다는 강사님께서 강의해주시는게 더 올바른 방향으로 학습이 가능할거라고 생각했다. 활용편이라면 혼자봤겠지만, 기초는 잘못 이해하면 안되는것이기때문에 돈이 아깝지않았다. 결과적으로 강의를 듣는 목적을 모두 충족하였으며, .. 2020. 2. 3.
[네트워크] HTTP란 ? HTTP란? - Hyper Text Transfer Protocol의 약자로서 브라우저와 같은 응용 프로그램을 통하여 클라이언트와 서버 사이에 데이터 를 전송하는 프로토콜 - TCP/IP를 이용하는 응용 프로토콜 한줄요약 : 인터넷 데이터 전송 프로토콜 HTTP의 특징 - HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다. 그렇기 때문에 요청/응답 방식으로 동작한다 - 신뢰성 있는 데이터 전송 - Status Code 제공 - HTTP 메소드를 지원한다 GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT ex) 로그인요청 -> 완료or실패 응답 HTTP Code 응용법 - Status Code를 세분화해서 사용하게 된다면 해커의 공격위험성을 높일 수 있다. 코드를.. 2020. 2. 3.
[알고리즘] 스택(Stack)이란 ? 스택(Stack)이란 ? - 선형 자료구조의 한 종류로써 한쪽 끝에서만 입/출력이 일어나는 자료구조 스택의 특징 - LIFO ( Last In First Out) : 가장 나중에 추가된것이 가장 먼저 제거된다. --> 가장 처음의 추가된것은 가장 마지막에 제거된다. 연산의 종류 - pop() : 가장 위의항목을 제거 - push() : 가장 위에 Item을 추가 - empty() : 비어있는지 검사 - peek() : 가장 위의항목을 반환 (아래 구현부에서는 top이라 칭한다) TIP..peek와 pop의 차이점 -> pop은 제거하지만 peek는 제거가 아니다 ex) 1 2 3 이 차례대로 있는 Stack의 경우 peek를 하면 1 2 3 이 그대로 있지만 pop을 하면 1 2 만 남게된다. 스택의 구.. 2020. 2. 3.
[알고리즘] 퀵정렬이란 ? 퀵정렬이란 ? Divide-and-Conquer paradigm을 사용 - 풀기어려운 큰문제를 풀기쉬운 여러개의 작은문제로 바꾸어 해결 Partitioning 이용 - Pivot을 이용하여 왼쪽에는 Pivot보다 작은것들 오른쪽에는 Pivot보다 큰거를 정렬 - 1번하고 끝나는것이 아니라 정렬이 완료될때까지 재귀적으로 호출 - Pivot을 어떤방법으로 잡는지가 성능에 큰 영향을 끼친다. 시간복잡도 - 최악의경우 : O(n²) - 평균의경우 : O(nlogn) 수도코드 QuickSort(A[], p, r) { if(p 2020. 2. 2.
[Intellij] 실행버튼 활성화 안 되었을때 해당 사진처럼 실행버튼, 디버깅버튼이 활성화가 되지 않았을때 Add Configuration... 버튼클릭 + 버튼 클릭 프로젝트에 알맞는 버튼클릭 (여기서는 Application으로 진행) Main Class를 지정 (Use classpath of module 지정)을 해준후에 OK 버튼클릭 활성화 완료 2020. 2. 2.
[알고리즘] 버블정렬이란 ? 1. 버블정렬이란 ? - 인접한 두수를 비교하여 큰수를 뒤로 보내는 정렬방법. - 시간복잡도 : O(n²) 2. 구현소스 1. 큰수부터 맨뒤까지 보내야하기때문에 처음검사할때 마지막 인덱스까지 검사해야합니다. 2. 인접한 두수를 비교하여 앞인덱스의 숫자가 더 크다면 위치를 바꾸어줍니다. 3. 한번수행을 완료할때마다 뒤에서부터 큰수가 위치하게됩니다 그렇기때문에 한번수행할때마다 뒤에서부터 검사할 인덱스가 하나씩 줄어들게 됩니다. ex) 3 1 2 5 4 라는 배열이 있을때 1번수행하게 되면 5가 마지막에 위치하므로 5번째 인덱스는 검사를 하지않아도됨 3. 실행결과 2020. 2. 1.