전체 글160 [SpringBoot] 필터와 인터셉터 (ArgumentResolver + @Login 활용) 목차 서론: 공통 관심 사항 애플리케이션을 만들면, 로그인한 사용자만 서비스를 이용하도록 접근 제한 요구사항이 있을 수 있습니다. 그럴려면 모든 HTTP 요청마다 로그인을 한 사용자인지 검증하는 로직이 들어가야 합니다. 로그인한 사용자에게만 서비스에 접근할 수 있는 버튼을 제공함으로써 해결했다고 할 수 있지만, 버튼 없이도 직접 URL 창에 다음과 같은 URL을 쳐서 해당 서비스를 이용할 수 있습니다. http://localhost:8080/items (상품 목록 조회 URL) 구현 방법으로 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성할 수 있지만, 똑같은 작업을 반복해야 합니다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경된다면 작성한 모든 로직을 하나하나 수정해야 합니다. .. 2023. 9. 21. [프로그래머스] 양과 늑대 - JAVA 🔗 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨🏻💻 풀이 및 코드 ArrayList[] childs = new ArrayList[info.lenght] 를 사용하여 child[parent].add(child); 를 통해 부모 자식 간의 관계를 연결합니다. dfs를 통해 갈 수 있는 노드들을 순회하면서, 만약 늑대의 수와 양의 수가 같아진다면 더 이상 진행이 불가하므로 해당 경우의 순회를 종료합니다. 아니라면 최종 답 answer를 Max 값으로 갱신합니다. 자식 노드들을 추가하여 해당 경로로 다시 dfs 순회합니다. 전체 코드 import j.. 2023. 9. 21. [프로그래머스] 기둥과 보 설치 - JAVA 🔗 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨🏻💻 풀이 및 코드 단순 구현 문제였습니다. 기둥과 보를 설치하는 조건이 여러 개여서, 설치하거나 삭제할 때 해당 조건을 만족하는 지를 체크하는 알고리즘을 구현하는 것이 관건이었습니다. 먼저, 헷갈리지 않게 기둥과 보 설치 유무를 체크하는 boolean[][] 배열을 각각 따로 만들어서 체크했습니다. 설치할 땐, checkPillar() 함수와 checkBeam() 함수를 각각 따로 만들어 주어진 조건을 만족하는지 체크했습니다. 삭제할 떈, 우선 삭제를 진행했다가 전체 구조물이 주어진 조건을 만족.. 2023. 9. 20. [SpringBoot] 쿠키와 세션(HttpSession) 목차 서론 현재 간단한 회원가입, 로그인, 상품 목록 관리 애플리케이션을 만들었다고 가정해 봅시다. 상품 목록 관리 같은 기능을 이용하기 위해선 반드시 그 전에 로그인을 해야 합니다. 하지만, HTTP는 비연결성(Connectionless)이기 때문에 클라이언트는 사용자의 아이디와 비밀번호를 요청 시마다 매번 서버에게 넘겨주어야 합니다. 이 번거로운 작업을 쿠키와 세션을 통해 해결할 수 있습니다. 화면 예시 쿠키? 어떻게 클라이언트에서 매번 일일이 아이디와 비밀번호를 넘겨주지 않아도 로그인한 사용자인 것을 판단하고 해당 정보를 가져올 수 있을까요? 로직은 간단합니다. 쿠키에 관련 정보를 저장하면, 웹 브라우저가 쿠키를 매 요청마다 지속적으로 보내줍니다. 쿠키 생성 사용자가 아이디와 비밀번호를 입력해 로그.. 2023. 9. 19. [프로그래머스] 길 찾기 게임 - JAVA 🔗 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨🏻💻 풀이 및 코드 전위 순회와 후위 순회는 전형적인 알고리즘이라 어려울 게 없지만, 주어진 노드들을 이용해 이진트리를 만드는 것이 까다로운 문제였습니다. 노드들의 연결을 위해 Node 클래스를 생성하여 해당 노드의 x좌표, y좌표, 노드의 번호, 왼쪽 노드, 오른쪽 노드 의 값을 저장합니다. 주어진 노드들을 y좌표가 큰 순서대로 정렬합니다. y좌표가 같다면 x좌표가 작은 순서대로 정렬합니다. 정렬된 노드들 중 가장 첫 번째 노드가 root 노드가 되므로(가장 레벨이 높은 노드), 이 root 노.. 2023. 9. 19. [프로그래머스] 파괴되지 않은 건물 - JAVA 🔗 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 👨🏻💻 풀이 및 코드 시도 1 - 브루트포스 (시간초과) 단순히 완탐으로 스킬에 포함되는 구간만큼 내구도를 높이거나 낮추는 작업을 하면 시간 초과가 발생합니다. 이 때의 시간 복잡도는 세로의 길이를 N, 가로의 길이가 M, 스킬의 갯수가 K개 일때 O(N * M * K) 의 시간 복잡도를 가집니다. 누적합을 사용하여, 스킬을 사용할 떄마다 N*M 크기만큼 배열을 도는 것이 아니라 O(1) 만에 해결할 수 있습니다. 시도 2 - 누적 합 (성공) 1) 1차원 누적합 만약 [1, 2, 3, 4, 5] .. 2023. 9. 18. 이전 1 ··· 3 4 5 6 7 8 9 ··· 27 다음