프로젝트 타임라인
·
Project/페이스콕
2025년 1월 10일 (금)☑️ 미팅   2025년 1월 13일 (월) ~ 2025년 1월 16일 (목)☑️ 요구 사항 분석☑️ 도메인 설계 2025년 1월 16일 (목) ~  25(토)- 중간에 과제 전형 수행☑️ 클래스 설계[ ] 기능 리스트 업 2025년 1월 29일(수) ~  2월 1일(토)☑️ SpringBoot Project Setting  2025년 2월 2일(일) ~  2월 4일(화)☑️ ECR, ECS 무중단 배포 파이프라인 설계 및 구축
[LeetCode#151] Reverse Words in a String
·
Algorithm/문제풀이
❐ Description문제링크https://leetcode.com/problems/reverse-words-in-a-string/description난이도Medium (골드5) 이번 문제는 어떤 방식으로 푸느냐에 따라 개인적으로 느끼는 난이도에 차이가 있는 문제 같다.기본적으로 제공해주는 메서드(trim, replaceAll)를 사용하면 비교적 간단하게 해결할 수 있다.하지만, 면접에서 기본 메소드를 사용하지 말고 위 문제를 해결하라고 하면 어떻게 해야할지생각해봐야 한다.     ❐ 문제 분석문제를 요약하자면,문장을 거꾸로 뒤집어라.앞뒤에 공백이 와서는 안된다.문자 사이에 공백은 하나여야 한다.주어진 문자열의 길이 : `1 영어 대소문자, digits, 공백으로 이루어짐적어도 하나의 단어가 있음.   ..
[LeetCode#198] House Robber
·
Algorithm/문제풀이
❐ Description문제 링크https://leetcode.com/problems/house-robber/description/난이도Medium(실버2~1)최초에 DFS로 풀이를 했었는데 Time Limit Exceed가 발생했다. 이 문제를 해결하는 과정에서 Memoization을다시 제대로 학습하게 됐으며, 이 문제를 시작으로 보다 다양한 DP 문제를 풀어봐야겠다.     ❐ Solutions1. Reculsive Ⅰ - Time Limit Exceedpublic class Solution { private int answer = 0; public int rob(int[] nums) { for (int i = 0; i nums.length - 1) { ..
Memoization (메모이제이션)
·
Algorithm/내용 정리
❐ Description[LeetCode#198. House Robber] 문제를 풀면서 메모이제이션 방식에 능숙하지 않음을 파악했고,간단한 예제와 함께 두 가지(top-down / bottom-up) 방식을 숙달하자.      ❐ 메모이제이션이란?메모이제이션(memoization)은 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술이다. 특히 동적계획법(DP)의 핵심이 되는 기술이다. 주로 배열 또는 맵을 이용해서 결과를 저장한다.      ❐ 구현하는 두 가지 방식1. Top-Down (하향식)재귀 기반의 접근으로, 문제를 더 작은 하위 문제로 나누어 풀어가며, 이미 계산한 결과를 저장..
레디스 데이터 백업 방식
·
Back-End/Redis
❐ Descriptionredis를 캐시가 아닌 영구 저장소와 같은 용도로 사용한다면, 데이터를 디스크에 주기적으로백업하는 것이 안전하다. 데이터를 안전하게 저장하기 위해 Redis에서는 RDB와 AOF 두 가지백업 방식을 지원한다. 오늘은 각 백업 방식의 특징과 차이점을 학습해보자.     ❐ RDB1. RDB란?RDB 파일은 레디스에서 데이터를 백업하기 위한 가장 단순한 방법이다.원하는 시점에 메모리  자체를 스냅숏 찍듯 저장할 수 있다.바이너리 파일이다.AOF 파일보다 사이즈가 작아서, 로딩 속도가 더 빠르다. 2. 저장 시점 정하기save 900 1           #900초(15분) 동안 1번 이상 key 변경이 발생하면 저장save 300 10         #300초(5분) 동안 10번 이..
[LeetCode#128] Longest Consecutive Sequence
·
Algorithm/문제풀이
❐ Description문제링크https://leetcode.com/problems/longest-consecutive-sequence/description/난이도medium(골드3~2)     ❐ 문제 분석주어진 배열에서 가장 긴 연속되는 요소의 길이를 구하는 문제이다.중복되는 숫자는 제외해야 하며, `O(n)`의 시간 복잡도로 구현해야 한다.     ❐ 문제 풀이1. 시간 복잡도 `O(NlogN)`정렬을 사용해서 풀이할 수 있는 방법이다. 물론 문제의 요구사항인 시간복잡도 보다 크지만,문제 제약 조건이 허술해서 이 방법으로도 풀이는 된다.public int longestConsecutive(int[] nums) { Arrays.sort(nums); int maxLength = -1; ..
Binary Search는 꼭 정렬된 배열에서만 사용해야 할까?
·
Algorithm/내용 정리
❐ Description[LeetCode#162] Find Peak Element 문제를 풀면서 단순하게 생각했던 부분을 바로 잡자.     ❐ Find Peak Element 이진 탐색이란 오름차순으로 정렬된 리스트에서 단조성을 이용해 특정값을 찾는 알고리즘이다. (wiki 링크)단조성이란? 값이 한 방향으로 증가하거나 감소하는 특성 그래서 이 문제를 처음에 접근할 때 이진 트리를 어떻게 사용하라는 거지? 라는 생각을 헀다.왜냐면 주어진 배열은 오름차순이 아니기 때문이다. 하지만 해당 문제의 요구사항 중 하나는`O(logN)`의 시간 복잡도로 풀이를 하는 것이다.     ❐ 정렬되어 있지 않아도 Binary Search를 적용할 수 있다.위에서 단조성에 대해서 이야기 했다. 그럼 다음 배열은 단조성을 ..
직렬화 & 역직렬화
·
Langauge/Java
❐ DescriptionRedis를 사용할 때 데이터를 저장/조회 하는 과정에서 직렬화와 역직렬화는 필수적으로 이루어진다.그래서 오늘은 Java의 직렬화 & 역직렬화 부터 다시 알아보고, 순서대로 SpringBoot, Redis에서직렬화와 역직렬화를 할 수 있는 방법에 대해서 공부하자.     ❐ Java에서 직렬화 & 역직렬화 사용하기우선 자바 직렬화를 사용하기 위해선 아래의 functionalInterface를 사용해야 한다.package org.springframework.core.serializer;@FunctionalInterfacepublic interface Serializer {...} 위 인터페이스를 정의해줘야 하는 이유는 아래의 코드에서 확인할 수 있다.@Overridepublic vo..