전체 글 552

[Programmers][Kakao] 캠핑

난이도 : Level 4 문제링크 캠핑장에 여러개의 쐐기를 박아두었다 설치한 쐐기의 좌표값을 가진 2차원 정수형 배열이 주어진다 쐐기들 중 한 쌍을 골라 텐트를 칠 수 있다 텐트는 직사각형이여야 한다 양쪽 쐐기가 대각에 위치하도록 하여 텐트를 친다 텐트가 점유하는 영역 내부에 다른 쐐기를 포함하면 안된다 단, 다른 쐐기가 경계에 위치하는 경우는 허용함 주어진 쐐기들을 이용하여 만들 수 있는 텐트의 최대 수를 리턴하라 쐐기의 개수 : 2 ~ 5000 쐐기의 x좌표 : 0 ~ 2^31-1 쐐기의 y좌표 : 0 ~ 2^31-1 해설 서로 가까이 인접해 있는 쐐기부터 텐트를 칠 수 있는지 체크하기 양쪽 쐐기가 대각선에 위치하는지 확인 양쪽 쐐기 안에 쐐기가 들어있지 않은지 확인 전체 경우를 모두 체크하며, 칠 ..

Algorithm/(Java) PS 2023.09.21

[Spring Boot][KoLiving] 3-2 Sign-up

이전 포스팅 2. 패스워드 설정 악의적인 공격 입력된 패스워드의 데이터는 데이터베이스에 평문으로 저장되면 안됩니다. 데이터베이스가 공격받아 아이디-패스워드가 노출될 수 있습니다. SQL Injection 등 패스워드 정보를 보호하기 위해 부호화를 통한 보안 방식이 권고되었습니다. 단방향 해싱 장점 보안성 해싱 값이 노출되더라도 원본을 알아내기 어렵습니다. 비선형 연산, 혼돈, 확산 등의 성질을 근거로 해시 함수의 복구 안전성이 확보됩니다. 적은 연산 입력받은 패스워드 값이 저장된 해싱값과 일치하는지 여부를 쉽게 얻을 수 있습니다. 단점 레인보우 테이블 단방향 해시값에 대응되는 다양한 원본값을 미리 계산해둔 테이블입니다. 이를 통해 해시값과 일치하는 원본 비밀번호를 빠르게 찾을 수 있습니다. BCrypt ..

Spring/Spring Boot 2023.09.19

[Spring Boot][KoLiving] 3-1 Sign-up

안녕하세요. 이번에는 회원가입에 대해 포스팅하겠습니다. 저희 팀에서는 "인증 이메일을 통해 인증을 받고 회원가입을 진행시키자" 라는 의견이 모였습니다. 저는 이번에 처음으로 인증 이메일을 구현해 보았는데요. 처음 구현해보는 거라 시행착오를 많이 겪었습니다. 그 과정속에서 제가 어떻게 생각했고 구현해 나갔는지 공유해드리려 합니다 1. 이메일 인증 이메일 인증 Flow 1. 해당 이메일의 유효성 검사 2. 인증 이메일 전송 유저 테이블의 정규화가 필요합니다. 사용자가 인증 이메일을 받았지만 실제로 인증 절차를 진행하지 않은 경우가 발생할 수 있습니다. ConfirmationToken 테이블 EMAIL 이메일 발송을 요청한 이메일 TOKEN 서버에서 인증에 대한 검증을 위해 저장합니다. - UUID형 TOKE..

Spring/Spring Boot 2023.09.19

[Spring Boot][KoLiving] 2. i18n

안녕하세요! 이번에는 메시지 국제화를 살펴보고 프로젝트에 적용한 것들을 포스팅 하겠습니다. 1. i18n 이란? "Internationalization"의 축약형이며 단어의 뜻은 "국제화" 입니다. 이는 "특정 언어나 지역에 종속되지 않고 다양한 지역, 언어에서 정상 동작하도록 고려하는 개발"을 말합니다 서버에서 클라이언트의 응답을 내려줄 때, 응답내용이 특정 지역과 언어에 종속되지 않도록 개발하는 것을 목표로 두었습니다. 2. 필요성 메일 전송 프로젝트내에서 사용자에게 메일을 전송하는 기능이 있습니다. (인증 이메일, 비밀번호 재설정 등) 메일은 클라이언트의 모국어로 만들어진 메일로 전송되어야 합니다. 내국인과 외국인에게 전송되어야 하는 메일 언어가 다릅니다. 예외 메시지 로그인 중 잘못된 비밀번호로 ..

Spring/Spring Boot 2023.09.18

[Spring Boot][KoLiving] 1. Validation

안녕하세요. 저는 2023.04부터 비사이드라는 직장인 사이드 프로젝트에 15기에 참가하였습니다. 사이드 프로젝트를 진행하면서 공유하고자 하는 내용을 포스팅해보려 합니다. 제가 진행한 사이드 프로젝트는 외국인을 상대로 룸메이트를 매칭해주는 글로벌 서비스입니다. 저는 유저 도메인쪽을 맡았고, 회원가입과 인증&인가 기능을 구현했습니다. 첫번째로 포스팅할 주제는 "Validation" 입니다. 개념 소개부터 구현까지 공유드리겠습니다 1. Validation 이란 클라이언트가 요청중에 전달한 입력값의 유효성 검증을 뜻합니다. 클라이언트가 서버 API를 호출할 때 클라이언트는 요청을 함에 있어 입력값을 전달합니다. 서버는 입력값이라는 요청값에 대해 유효하다 판단이 되면, 응답을 위한 로직을 수행하게 됩니다. 2...

Spring/Spring Boot 2023.09.18

[Leetcode Top Interview 150] 128. Longest Consecutive Sequence

난이도 : medium 문제링크 정렬되어지지 않은 정수형 배열 nums가 주어진다 가장 긴 연속적인 요소들의 길이를 리턴하라 ex) [100,4,200,1,3,2] => 4 (1, 2, 3, 4) 1. 접근법 해시테이블에 요소별 인덱스 Entry를 저장함 방문용 set을 선언함 요소를 하나하나 순회하면서, 현재 탐색중인 원소보다 1 더 크고 방문하지 않았으면, 길이를 1 늘려 반복한다 현재 탐색중인 원소보다 1 더 작고 방문하지 않았으면, 길이를 1 줄여 반복한다 길이와 최종 답의 max값을 최종 답으로 업데이트한다 3. 구현 코드 public int longestConsecutive(int[] nums) { if (nums.length == 0) { return 0; } // val - idx Map ..

Algorithm/(Java) PS 2023.09.17

[Leetcode Top Interview 150] 202. Happy Number

난이도 : easy 문제링크 n이라는 정수가 주어짐 n이 happy number인지 체크하라 happy number 양의 정수로 시작하며, 각각의 digit 제곱의 합으로 교체됨 숫자가 1이 될때까지 반복하며, 1이되면 그 숫자는 happy number 이다. 1. 접근법 각각의 digit 제곱의 합은 10의 멱수가 되어야 한다 n - digit 제곱합을 해시테이블에 저장한다 방문한 n은 다시 방문하지 않는다 3. 구현 코드 class Solution { Map map = new HashMap(); public boolean isHappy(int n) { while (n != 1 && !map.containsKey(n)) { n = process(n); } return n == 1 ? true : fal..

Algorithm/(Java) PS 2023.09.16

[Leetcode Top Interview 150] 49. Group Anagrams

난이도 : medium 문제링크 string 배열이 주어진다 : strs strs 중, 서로 anagram인 문자열들을 그룹핑하고, 2차원 배열로 리턴하라 ex) Input: strs = ["eat","tea","tan","ate","nat","bat"] Output: [["bat"],["nat","tan"],["ate","eat","tea"]] anagram은 또 다른 단어의 재구성을 통해원본 단어를똑같이 만들 수 있는 단어를 뜻한다 반드시 모든 문자를 한번씩 사용하여 구성해야 한다 ex) s = "anagram", t= = "nagaram" => true ex) s = "ab", t= = "a" => false (s의 문자 b를 사용하지 않았음) 1. 접근법 해시테이블 사용 anagram 대표문자 -..

Algorithm/(Java) PS 2023.09.16

[Leetcode Top Interview 150] 290. Word Pattern

난이도 : easy 문제링크 두개의 문자열이 주어진다 : pattern, s s가 pattern 문자열의 패턴을 따르는지 확인하라 ex) pattern = "abba", s = "dog cat cat dog" => true ex) pattern = "abba", s = "dog cat cat fish" => false 1. 접근법 해시테이블 생성 pattern 문자에 대응되는 s 문자열 s 문자열에 대응되는 pattern 문자 한 문자씩 순회하면서, 특정 pattern 문자에 대응되는 s 문자열이 해시테이블에서 가지고있는 값과 동등한지 확인 s 문자열에 대응되는 pattern 문자가 해시테이블에서 가지고있는 값과 동등한지 확인 3. 구현 코드 public boolean wordPattern(String ..

Algorithm/(Java) PS 2023.09.16

[Leetcode Top Interview 150] 205. Isomorphic Strings

난이도 : easy 문제링크 두개의 문자열이 주어진다 : s, t s와 t가 isomorphic 한지 체크하라 isomorphic은 다르게 표현되지만 같은 구조를 가지고 있을 때 사용한다 s의 문자가 t의 문자로 replace될 수 있으면 isomorphic하다 할 수 있다 ex) s="egg", t="add" => true ex) s="foo", t="bar" => false ex) s="paper", t="title" => true 1. 접근법 해시테이블 생성 s문자에 대응되는 t문자 t문자에 대응되는 s문자 한 문자씩 순회하면서, 특정 s문자에 대응되는 t문자가 해시테이블에서 가지고있는 값과 동등한지 확인 특정 t문자에 대응되는 s문자가 해시테이블에서 가지고있는 값과 동등한지 확인 3. 구현 코드 ..

Algorithm/(Java) PS 2023.09.16