전체 글 94

대칭키 vs 공개키(비대칭키) 암호화의 차이점

대칭키와 장단점 대칭키는 암호화와 복호화할 때 사용하는 키가 동일하다. 하나의 키를 사용하여 데이터를 암호화, 복호화 하는데 장단점으로는 아래와 같다. 공개키 암호화 방식과 비교했을 때 속도가 더 빠르다는 장점이 있다. 그러나 키를 직접 교환하는 방식이며, 하나의 키로 암복호화 하기에 해당 키가 탈취당했을 때 누구나 암호화된 데이터에 접근할 수 있다. 대칭키 암호화: 암호화와 복호와의 키가 같다. 용도: 데이터의 내용을 숨기기 위함 장점: 속도가 빠르다. 단점: 키가 유츌될 위험이 있어 보안 수준이 낮다. 공개키와 장단점 공개키는 암호화, 복호화할 때 사용하는 키가 다르다. 공개키를 사용하여 데이터를 암호화하고 개인키를 사용하여 복호화 하는데 장단점으로는 아래와 같다. 대칭키 암호화 방식과 비교했을 때 ..

TIL 2023.10.16

[프로그래머스 - Java/Stack] 짝지어 제거하기

1. 문제 입력받은 문자열 중 연속되는 2개의 문자가 있다면 제거하는 문제이다. 연속되는 문자가 없다면 0을 반환하고 연속되는 문자를 제거할 수 있다면 1 반환. 2. 의사코드 연속된 문자를 비교한다는 것을 보고 스택을 사용하여 문자 하나씩 추가하면서 비교하면 될 것 같았다. 1. 문자 하나씩 비교를 해야하기에 String이 아닌 Character 스택 생성 Stack stack = new Stack(); 2. 빈 스택에 첫 문자를 추가하고, 이후에 추가할 때마다 값을 비교 stack.push(s.charAt(0)); for(인덱스 1부터 문자열 s길이만큼){ stack의 값과 새로 추가할 문자를 비교하여 같다면 삭제, 다르다면 추가 } 3. 시도 import java.util.Stack; class S..

자바 알고리즘 2023.10.13

[MySQL] 임시 테이블을 생성하는 with

아래의 코드들은 온라인, 오프라인 매장을 갖고있는 쇼핑몰의 데이터를 예시로 진행한다. 온라인 오프라인 고객 모두 이름과 주소, 연락처를 갖고있다. 동일한 이름이 같은 지역에 존재해도 핸드폰 번호가 다르다면 다른 사람이다. 동일한 이름이 같은 번호를 가질 수 없다. 두 테이블의 동일 인물은 반포에사는 "박" 이름을 가진 사람이다. 1. OFF_LINE 테이블에 데이터 삽입 insert into `OFF_LINE` (offline_id, offline_name, offline_address, offline_phone) values (1, '정', '용산', '010-1234-1234'), (2, '김', '마포', '010-111..

MySQL 2023.10.06

[leetCode - Java/Hash] 819. Most Common Word

1. 문제 문자열 paragraph 배열과 banned 배열이 주어진다. paragraph 배열의 단어는 특수문자를 제외하며 대소문자를 구분하지 않는다. banned 배열의 단어를 제외하고 가장 많이 나오는 단어를 구하여라 2. 의사 코드 1. 주어진 paragraph 배열의 특수문자와 공백을 제거해 소문자로 변경 String[] arr = paragraph.toLowerCase().split(" "); 2. 단어별로 몇번이 나오는지 count하기 String키값 : Integer벨류값을 갖고있는 HashMap for(int i=0; arr배열 길이만큼) { map에 arr[i]이 없다면 map에 벨류값1로 저장. map에 arr[i]가 있다면 현재 arr[i]의 벨류값에 +1하여 저장 } 3. key값..

자바 알고리즘 2023.09.29

[leetCode - Java/Two Pointer] 344. Reverse String

1. 문제 문제는 비교적 쉬운 편이다. 주어진 char 배열 s를 거꾸로 뒤집으면 된다. 2. 의사 코드 Stack stack = new Stack(); // list도 상관 없다 for(int i=s.length-1; i>=0; i--) { 스택에 char배열의 마지막부터 삽입 } for(stack.size()만큼 반복) { 입력받은 배열을 뒤집기 위해 stack에 반대로 저장된 요소를 다시 입력받은 char 배열의 0번째 인덱스부터 넣어준다 } 3. 시도 Stack stack = new Stack(); for(int i=s.length-1; i>=0; i--) { stack.add(s[i]); } for(int i=0; i

자바 알고리즘 2023.09.27

[SpringBoot] flyway와 DB migration 해야하는 이유

DB migration DB migration이 뭔지 몰랐다. 찾아보면 서로 다른 db의 데이터를 합치거나 다른 db로 이동하기 위함 이라곤 하는데, 쉽게 이해하자면 github에서 커밋을 추적하며 형상관리 하는 것을 db에서도 동일한 작업을 하는 것이다. 이전에 겪었던 문제들 초반에 프로젝트 설계를 했더라도 기능이 추가/삭제될 경우가 있는데, 그럴 때마다 필요에 따라 Entity를 수정하고 DB에 쿼리를 날려 수정/삭제를 했었다. 사소한 실수로 SQLSyntaxErrorException: Unknown column 에러가 발생했고 대부분의 이유는 Entity만 수정하고 쿼리는 실행하지 않은 경우로 사소한 실수를 줄일 수 있는 방법이 필요했다. 그 이외에도 여러 개발자가 협업하는 과정에서 github의 ..

Spring 2023.09.23

[Java] LinkedList 구현 및 Array와 차이점

자료구조와 알고리즘을 학습하며 LinkedList를 자주 접하게 되었다. LinkedList는 배열과 비슷한 구조로 자주 비교되곤 하는데, 이번에 배열과 LinkedList가 어떤 부분에서 다른지 확인해보려 한다. 앞으로 설명할 예시 데이터 형태는 int이다. Array / 배열 배열은 인덱스를 사용하여 요소에 직접 접근이 가능하다. 이 말은 인덱스를 알고 있으면 상수 시간 O(1)에 해당 요소에 접근할 수 있다는 뜻이다. 모든 요소는 메모리에 연속되어 저장된다. 첫 번째 요소의 인덱스(주소)를 알면 다른 요소에도 빠르게 접근이 가능하다. 배열은 생성시 크기가 고정된다. 계속해서 값을 추가하는 등의 작업이 있다면 효율적이지 않고 더 큰 배열을 만들어야 한다. 장점 조회 및 검색에 빠르다. 단점 삽입과 삭..

Java 2023.09.20

[leetcode - Java / DFS] 133. Clone Graph

1. 문제 - 이웃 노드가 담긴 리스트, 그래프의 전체 복사본을 반환 2. 의사코드 1. 복사본을 저장하기 위한 Hash private HashMap map = new HashMap(); 2. 현재 노드 복사본 생성 Node newNode = new Node(node.val, new ArrayList()); 3. map에 현재 노드와 복사본 저장 map.put(node, newNode); 4. 반복문으로 복사본에 채우기 3. 시도 class Solution { private HashMap map = new HashMap(); public Node cloneGraph(Node node) { // 현재 노드가 null이거나 복사본에 현재 노드가 없을 때 if (node == null) { return nul..

자바 알고리즘 2023.09.15

[leetCode - Trie / Java] 208. Implement Trie (Prefix Tree)

Trie 원하는 원소를 찾기 위해 자주 이용되는 방법으로는 BST(Binary Search Tree)가 있다. Trie는 트리의 일종으로 문자열의 키를 효율적으로 저장하고 빠르게 검색하기 위한 자료구조이다. 트라이의 중요한 속성 중 하나는, 루트에서부터 하위 경로까지 만나는 글자들을 모으면 찾고자 하는 문자열의 접두사를 얻을 수 있다는 것이다. 1. 문제 - 주어진 단어를 Trie에 삽입, 검색, 접두사 시작 확인 메서드를 구현하라 2. 의사 코드 한 번에 세 개의 메서드를 구현해야 했다. 메서드를 구현하기 전에 입력받은 문자열의 매 문자들을 노드로 저장하기 위한 설계가 필요해 보인다. Trie 객체를 초기화하면 root 변수는 생성자를 통해 map, inEnd 속성을 갖는다. public class T..

자바 알고리즘 2023.09.12