본문 바로가기

전체 글

(111)
[Java] 해시(Hash) & 해시 테이블(Hash Table) 📌 해시 (Hash) 란? Hash는 검색과 저장에서 좋은 성능을 가진다. Hash의 핵심은 Key와 Value이다. Key와 Value가 한 쌍으로 존재하는 자료구조이다. 이러한 Key와 Value의 한 쌍을 해쉬 테이블 (Hash Table)이라고 한다. Key 값은 절대로 중복되지 않는다는 특징을 가지고 있다. 같은 Key 값에 Value 값을 넣으면 이전 값은 사라지고 나중에 들어온 값이 Value에 남다. 📌 해시 테이블 (Hash Table) 이란? 해시 테이블은 키(Key), 해시함수(Hash Function), 해시(Hash), 값(value), 저장소(Bucket, Slot)로 이루어져 있다. Key를 Hash 값으로 매핑하고 이 Hash 값을 주소로 삼아 데이터를 Key와 Value로 ..
[Java] 배열(Array) 특징 & 사용법 📌 배열(Array)이란? 배열은 동일한 타입의 변수들을 한 곳에 저장해서 관리하는 것을 말한다. 배열을 이용하면 하나의 변수에 여러 정보를 담을 수 있고, 반복문과 결합하면 많은 정보도 효율적으로 처리할 수 있습니다. 📌 배열의 특징 연속된 자료구조이다. 배열의 값을 element라고 하고, 그 순서를 index라고 한다. 배열에 저장되는 값은 모두 같은 데이터의 유형이다. (int는 int 만, String 은 String) 배열의 index 순서는 1부터가 아닌 0부터 시작이다. 배열의 맨뒤의 대괄호 안에는 배열의 크기를 지정한다. 📌 배열의 사용법 // 선언 방법 1 int[] arr = new int[5]; // 크기 5의 배열 String[] strArr = new String[10]; // ..
[Java] 덱 / 디큐 (Deque) 자료구조 📌 덱 / 디큐 (Deque) 란? 덱은 Doble - Ended Queue의 줄임말로 큐의 양쪽에서 데이터를 넣고 뺄 수 있는 형태의 자료구조이다. 자바에서 덱은 인터페이스로 구현되어 있다. // 선언 방법 Deque deque = new ArrayDeque(); Deque linkedList = new LinkedList(); // 값 추가 deque.addFirst() // 값을 맨 앞쪽에 추가한다. 용량을 초과하면 예외가 발생. deque.offerFirst() // 값을 맨 앞쪽에 추가한다. boolean 을 반환. deque.addLast() // 맨 뒤쪽에 값을 추가한다. 용량을 초과하면 예외 발생. deque.offerLast() // 맨 뒤쪽에 값을 추가한다. boolean 을 반환. /..
[Java] 큐 (Queue) 자료구조 📌 큐 (Queue)의 개념 Queue의 사전적인 의미는 대기줄을 의미한다. 이처럼 줄을 지어 순서대로 처리되는 것이 Queue이다. Queue는 Stack 과는 반대로 First In First Out의 FIFO 즉, 선입선출 구조를 가진다. Queue는 LinkedList를 활용하여 생성해야 합니다. 그렇기에 Queue와 LinkedList가 다 import 되어 있어야 사용이 가능합니다. Queue는 가장 첫 번째 원소를 fornt라고 하고 끝에 있는 원소를 rear라고 한다. 데이터를 넣을 때는 EnQueue, 데이터를 꺼낼 때는 DeQueue라고 한다. 📌 큐(Queue) 사용법 // 선언 방식 Queue queue = new LinkedList(); // 값 추가 queue.add(1); qu..
[Java] 백준 25556 : 포스택 💻 문제 https://www.acmicpc.net/problem/25556 25556번: 포스택 포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다. www.acmicpc.net 💻 문제 이해 순열을 청소하는 것은 다음과 같은 과정을 통해 순열을 오름차순으로 정렬하는 것을 뜻한다. 순열 A의 원소들을 앞 원소부터 순서대로 네 개의 스택 중 하나에 삽입한다. 순열 A의 모든 원소를 스택에 삽입했다면, 네 개 중 원하는 스택에서 수를 꺼내는 것을 반복하여 네 개의 스택에서 모든 수를 꺼낸다. 꺼낸 수들을 꺼낸 순서대로 오른쪽에서 왼쪽으로 나열한다. 즉, 가장 처음에 꺼낸 수가 맨 뒤, 가장 나중에 꺼낸 수가 맨 앞에 위치하게 된다. 스택의 특징을 생각해 보면 먼저 넣은 값은 제일 나중에..
[Java] 스택 (Stack) 자료구조 📌 스택 (Stack) 스택은 어떠한 자료를 쌓아서 올려놓는 Last In First Out 구조이다. (LIFO) 예시로 프링글스가 있다. 가장 먼저 들어가 있는 과자는 가장 나중에 나올 수 있다. 즉, 나중에 들어간 과자가 가장 먼저 나오므로 후입선출이라고 생각하면 된다. 📌 Stack 사용법 Stack 선언 Stack stack = new Stack(); Stack stack = new Stack(); Stack 값 추가 Stack stack = new Stack(); stack.push(1); stack.push(2); Stack 값 제거 Stack stack = new Stack(); stack.pop; // 제일 위에 값 제거 stack.clear(); // stack 의 모든 값 제거 Sta..
[Java] 유클리드 호제법 (Euclidean Algorithm) 📌 유클리드 호제법이란? 두 개의 수가 자연수가 주어졌을 때 최대공약수(GCD)를 구하는 알고리즘을 말한다. 여기서 GCD 란? Greatest Common Divisor. 즉 가장 큰 공통된 약수라는 의미다. // 최대공약수 구하기 public static int gcd(int a, int b) { if (b == 0) { return a; } else { return gcd(b, a % b); } } 코드는 재귀를 사용하여 'b'와 'a'의 나머지를 'b'로 나눈 나머지를 'b'가 0이 될 때까지 반복적으로 호출합니다. 이 시점에서 GCD로 'a'를 반환합니다. 나머지가 0이라면 해당 수가 최종 최대공약수이다. 그렇지 않다면 나머지를 a로 바꾸어 재귀를 반복한다. +) 최소공배수 // 최소공배수 구하..
[JPA] 연관관계 매핑 📌 연관관계 매핑 엔티티(Entity) 들은 서로 관계를 맺고 있다. 게시판(Board)에 댓글(Comment)을 달 수 있고, 하나의 게시글은 여러 개의 댓글을 가질 수 있다. 이러한 관계를 1대 N의 관계라고 하며 각각의 엔티티들이 어떤 관계를 맺는지 파악하는 것이 중요하다. 📌 연관 관계 정의 규칙 연관 관계를 매핑할 때, 생각해야 하는 3가지 💡 방향 단방향 관계 : 두 엔티티가 관계를 맺을 때, 한쪽의 엔티티만 참조하는 것을 의미한다. 양방향 관계 : 두 엔티티가 관계를 맺을 때, 양 쪽이 서로 참조하고 있는 것을 의미한다. 💡 다중성 관계에 있는 두 엔티티는 다음 중 하나의 관계를 갖는다. Many To One = 다대일 (N:1) ex) 음식점 주인 여러 명이 하나의 음식점을 가지고 있을 때..