목록전체 글 (63)
쏭의 개발 블로그
[1] AOP란? 로직에 관점을 부여하는 프로그래밍 (Aspect Oriented Programming) 어떤 로직이 핵심 기능을 수행하며, 어떤 로직은 부가적인 기능을 수행하는지 관점을 부여해 분리 1. 필요성 기존 시간 측정 방식 : System.currentTimeMillis() 이용하여 시작과 종료 시점의 차이를 이용 시간 측정 기능은 핵심 관심 사항이 아니라 공통 관심사항 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움 시간을 측정하는 로직을 별도의 공통로직으로 만들기 어려움 2. AOP 적용하기 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 시간 측정 로직을 한군데에 모으고 원하는 곳에 적용 시간 측정 AOP 등록 1. A..
https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 이 문제는 정말 오래 삽질한 문제다. 진짜 진짜 너무 어려워서 저거 푼다고 며칠동안 끙끙댔다. 한 일주일동안 저거 때문에 다른 문제를 못 풀었던 기억.. 이렇게 사진으로 보면 안그런거같지만 로컬에서 계속 돌려서 그렇지 진짜 한 5일은 붙잡고 있었음. 겨우 힌트보고 해결했고 알고리즘 스터디하면서 친구들한테 풀이 설명해주는거 조차 너무 어려웠음 문제 위 문제를 간단하게 정리하..
https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 문제 문제를 요약하자면 아래와 같다. 여행에 필요하다고 생각하는 n개의물건 각 물건의 무게 w, 가치 v 준서는 최대 k만큼의 무게를 넣을 수 있는 배낭을 들고다님 배낭에 넣을 수 있는 물건들의 가치합은 최대가 되어야 함 풀이 평범한 배낭은 배낭(Knapsack) 문제이다. 배낭 문제는 짐을 쪼갤 수 있는 경우와 짐을 쪼갤 수 없는..
평소 항상 알고리즘 문제를 풀고 깃헙에 올리거나 공유 노션을 통해 친구들과 스터디를 진행했었다. 최근 하반기 채용공고가 많이 올라오면서 한동안 알고리즘 문제를 잘 못 풀었다. 한동안 잊고 있었던 알고리즘 풀이를 다시 환기도 시킬 겸, 기록도 할 겸 문제 풀면서 어려웠거나 까다로웠던 문제 풀이들을 기록해보려고 한다. 대충 어떤 문제를 적을지 생각도 해놓았다. 아마 여기 있는 내용 위주로 할 듯..? 다른 것도 할일이 많아서 저걸 다 적을 수 있을 진 모르겠지만 차근차근 해봐야지!!
[1] 백트래킹이란 한정 조건을 가진 문제를 푸는 전략 모든 경우의 수를 시도하여 문제의 정답을 찾아감 한정 조건에서의 모든 경우의 수를 시도 ⇒ 상당한 경우의 수들이 배제되므로 다중 for문보다 빠름 (1) 원리 각 단계에서 해결책 후보군 중 하나를 선택하고 이 선택이 조건을 만족하는지 검사 조건을 만족하지 않으면 이전 단계로 돌아가 다른 후보군 선택 1,2 과정을 반복하면서 최종적으로 해결책을 찾아가는 것이 백트래킹의 기본적인 원리 (2) 구현 한정 조건을 걸어 완전탐색에서 유망하지 않은 시도를 걸러내는 것 DFS, BFS를 사용하여 구현 모든 경우에서 한정 조건을 만족하는 경우를 탐색 한정 조건에 부합하지 않다면 이전 수행으로 돌아와야하므로 DFS의 구현이 편함 코드의 형태 def 재귀함수(n): ..
[1] 플로이드 워셜 알고리즘 모든 노드에서 다른 모든 노드까지의 최단 경로를 모두 계산 단계별로 거쳐 가는 노드를 기준으로 알고리즘을 수행 매 단계마다 방문하지 않은 노드 중에서 최단 거리를 가는 노드를 찾는 과정이 필요 없음 2차원 테이블에 최단 거리 정보를 저장 다이나믹 프로그래밍 유형에 속함 동작 과정 각 단계마다 특정한 노드 k를 거쳐 가는 경우를 확인 : a에서 b로 가는 최단 거리보다 a에서 k를 거쳐 b로 가는 거리가 더 짧은지 검사 점화식 상세 동작 과정 [초기상태] 그래프를 준비하고 최단 거리 테이블을 초기화 현재 노드와 인접한 노드를 확인하여 테이블을 갱신하도록 함 2차원 테이블 : “노드 → 노드” 를 기록 [Step 1] 1번 노드를 거쳐 가는 경우를 고려하여 테이블 갱신 k = ..
[1] 최단경로 알고리즘이란? 가장 짧은 경로를 찾는 알고리즘 다양한 문제상황 한 지점에서 다른 한 지점까지의 최단경로 한 지점에서 다른 모든 지점까지의 최단경로 모든 지점에서 다른 모든 지점까지의 최단 경로 표현 각 지점은 그래프에서 노드로 표현 지점간 연결된 도로는 그래프에서 간선으로 표현 [2-1] 다익스트라 최단경로 알고리즘 특정한 노드에서 출발하여 다른 모든 노드로 가는 최단 경로를 계산 음의 간선이 없을 때 정상적으로 동작( 현실세계의 간선은 음의 간선X) 그리디 알고리즘으로 분류됨 매 상황에서(방문하지 않은 노드 중) 가장 비용이 적은 노드를 선택해 임의의 과정을 반복 동작과정 출발 노드를 설정 최단 거리 테이블을 초기화 모든 노드까지 가기 위한 비용을 무한으로 설정 자기자신의 노드는 0 방..
쿠키와 세션을 사용하는 이유 - HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용 HTTP 프로토콜의 특징 Connectionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청(Request) 했을 때 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리방식 Stateless 프로토콜 커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성 🚨 정보가 유지되지 않으면 매번 페이지를 이동할 때마다 로그인을 다시 하거나, 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없거나 하는 등의 일이 발생할 수 있음 ⇒ Stateful 경우를 대처하기 위해 쿠키와 세션을 사용 쿠키와 세션의 차이 : 상태 정보의 저장 위치 쿠키 : 클라이언트(로컬 pc) ..