분류 전체보기 193

📑 mybatis_검색기능_국비Day74

지난 시간에는 기존에 실습한 방명록 파일에 대한 DB접근을 mybatis ORM을 사용하도록 수정하는 작업을 거쳤다. 소스파일은 필자의 깃허브 주소에 있으니 내려받아서 DB접근을 mybatis로 수정하고, 검색기능을 추가하는 실습을 함께 따라해보면 좋을 것 같다. 소스코드는 여기에서 확인하길 바란다. [ visit_list.jsp ] 먼저, 모든 방명록을 한 곳에 리스트로 출력한 파일을 수정할 것이다. 이 부분에 검색을 할 수 있도록 ui를 다음과 같이 추가해주자. 어느 위치에 코드를 추가할지 인식할 수 있도록 하겠다. 15행에 value값으로 ${param.search_text}를 출력해주었는데, 이는 검색조건으로 자기 자신을 호출한 경우 정보 유지를 위해 사용한 것으로 자세한 설명은 밑에서 계속 하도..

📑 깊이 우선 탐색DFS(Depth-First_Search)

지난 번에 그래프의 종류에 대해서 정리를 했다. 오늘은 그래프를 순회하는 방법중의 하나인 DFS탐색법을 정리하겠다. BFS는 다음시간에 이어서 정리하도록 하겠다. 코테에 가장 많이 나오는 탐색유형으로 한 번쯤은 정리할 필요성이 있다고 생각했다. 아직 그래프에 대해 잘 모른다면, 여기로 가서 간단하게 개념을 익히고 오는 것이 좋을 것 같다. 보통 BFS는 큐를, DFS는 스택을 사용하여 구현하는데, 재귀함수 또한 스택 메모리 공간에 쌓아 올려지는 구조를 띄기 때문에 재귀함수를 사용하여 구현 및 정리하도록 하겠다. 그래프의 모든 정점을 한 번씩만 방문하기 위해 DFS(depth-first-search)를 구현하기 전에 간단하게 DFS의 탐색 과정과 순서를 살펴보고 넘어가자. 이름 그대로 한 우물만 깊게 파다..

📑 백준[자바]_9370_미확인도착지_다익스트라

한동안 미뤄두었던 최단거리 알고리즘 문제를 풀어보았다. 오랜만에 풀어보다 보니 많은 난항을 겪었는데, 풀이과정과 접근 방법을 정리해보겠다. 시작노드에서 도착노드까지의 최단거리가 구해지는 것은 맞는데, 최단거리를 구성하는 경로의 경우의 수가 반드시 하나일 것이라는 보장이 없다. 바로 전전 단계 문제인 특정한 최단 경로와 아주 비슷한 문제라고 생각할 수 있다. [ 접근 1 ] 이전에 다익스트라 문제를 풀어보았을 때, 특정 정점을 지나서 가는 경로를 구하는 문제를 풀어본 적이 있었다. 단순하게 생각해서 정점 g, h를 연결하는 경로를 반드시 지나가야 할때, 시작노드가 s, 도착노드가 e라고 하면, s -> e인 최단 거리가 s -> g -> h -> e인 경우에 구해지는 최단 거리 또는 s -> h -> g ..

📑 mybatis_국비Day73

지난 시간에는 JNDI를 사용한 mapping방법을 정리했다. 이 경우에는 DBCP에 대한 정보를 가지고 있는 JNDI방식이 context.xml파일에 정의된 내용을 기반으로 찾는 방식이므로 context.xml파일이 반드시 필요하다고 말을 했는데, 이 xml파일 없이도 mapping이 가능하다는 점을 오늘 배웠다. 후에 스프링을 배울때는 JNDI기법도 사용하긴 하지만 대부분 필자가 앞으로 사용하고자 하는 방식을 사용한다고 한다. 기본적으로 JNDI는 톰캣이 구동되면서 context.xml파일을 파싱하여 해당 환경 설정을 셋팅해주는 것인데 오늘 배운 POOLED방식을 사용하면 DBCP에 대한 정보를 입력해줌으로써 Mybatis가 직접 처리하도록 위임시키는 방법이다. 공유하는 소스코드에는 gogek.xml..

📑 우선순위큐(Priority Queue)

오늘은 다익스트라 문제를 본격적으로 풀어보기 전에 먼저 그래프 문제에서 자주 사용하는 우선순위 큐라는 자료구조에 대해 정리를 해보겠다. 결국에 큐이기 때문에 add, poll, peek 등의 연산을 수행하지만, 하는 일과 내부 구조는 기존의 큐와 완전히 다르다. poll이나 peek의 연산으로 추출되는 원소는 기존 큐의 연산순서인 FIFO에 따라서 제일 먼저 들어온 요소가 나오는 것이 아니라, 말 그대로 현재 큐 안에서 제일 우선순위가 높은 요소가 먼저 나온다. 이는 우선순위 큐가 기존 알던 큐가 아닌 힙(heap)이라는 자료구조로 구현되기 때문에 가능하다. 가장 많이 사용하는 형태는 클수록 우선순위가 높은 형태 or 작을수록 우선순위가 높은 형태이다. 어떤 우선순위 큐의 front에 위치하는 원소가 가..

📑 그래프(Graph)의 종류

용어 설명 그래프(Graph) 노드와 간선을 하나로 모아 놓은 자료 구조 정점(Vertex) 노드라고도 하며, 정점에는 데이터가 저장된다. 간선(Edge) 링크라고도 하며, 노드간의 관계를 나타낸다. 인접 정점 (adjacent vertex) 간선에 의해 직접 연결된 정점 차수(degree) 무방향 그래프에서 하나의 정점에 인접한 정점의 수. 무방향 그래프에 존재하는 존재하는 정점의 모든 차수의 합 == 그래프의 간선의 수 * 2 진출 차수 (out-degree) 방향 그래프에서 사용되는 용어로, 현재 노드에서 외부로 향하는 간선의 수 방향 그래프에 있는 정점의 진입 차수 또는 진출 차수의 합 == 방향 그래프의 간선의 수 진입 차수 (in-degree) 방향 그래프에서 사용되는 용어로, 외부 노드에서 ..

📑 최종프로젝트_DAY2~4

DAY2에는 점심시간에 점심을 먹고 짧게 진행상황 확인만 하면서 오늘할 회의 내용을 정리했다. 프로젝트 이름을 하나씩 생각해보는 것과 각자 유즈케이스 다이어그램을 하나씩 작성해오는 것이 목표였는데, 프로젝트 이름은 너무 촌,,,스러워서 하루만 더 고민해보기로 했고, UML은 한 팀원이 엄청 열심히 준비해 주어서 다함께 약간의 보완을 거친 후에 다음과 같은 UML을 완성했다. [ UML ] 간단하게 앞으로 개발할 웹 페이지를 Top-Down방식으로 설계를 했다. 크게 한 페이지 단위로 설계를 하고, 세부 기능들을 추가해가면서 모듈을 추가할 예정이다. 기능을 기준으로 나눈 단위는 다음과 같다. 로그인/회원가입(소셜 로그인 api) 메인 페이지(모든 사용자) 마이 페이지(로그인 한 사용자만) 학습 카드보면서 ..

📑 ORM_DB프레임워크_국비_DAY72

ORM(Object Relationship Mapper) -> 데이터베이스 프레임워크를 통칭하는 말 DB와 객체를 연결시켜주는 프레임워크 (DB와 자바의 객체(Vo)와 자동으로 mapping 해주는 객체) DB Object처리하는 프레임워크 종류 Hibernate(ORM성격이 짙다. 객체의 속성명과 DB의 컬럼명을 일치시켜서 연결시켜놓는다.) : SQL 문장X 자바에서 지원하는 객체는 JPA가 있다. Mybatis(SQL Mapper) iBatis : 2.x에 대한 명칭 Mybatis: 3.x에 대한 명칭 sql문장으로 구성된 id를 이용해서 호출을 하면, SqlSession이 해당 sql명령을 처리해준다. [ MyBatis 작업 순서 ] 기존에 DB에 접근할때 사용했던 DBService를 사용하지 않고..

📑 백준[자바]_1992_쿼드트리_분할정복

오늘은 색종이 문제에 이어서 두 번째로 분할정복의 문제를 풀이했다. 이번 문제는 쿼드트리를 생각해보는 문제로 트리의 개념이 직접적으로 코드에 구현되지는 않지만, 한 번쯤 생각해볼만한 문제이다. 우리가 평소에 알고 있던 트리는 이진트리로서 한 노드가 가질 수 있는 자식노드가 최대 2개인 트리의 구조이다. 그렇다면 쿼드 트리는 무엇일까? 말 그대로 한 노드가 가질 수 있는 자식 노드가 최대 4개인 트리의 구조이다. 그림상으로 보면 다음과 같다. 그렇다면 이 문제에서 쿼드트리를 어떻게 적용해볼수 있을까? 문제에서 주어지는 조건을 한 번 생각해보자 [ 문제 접근 & 알고리즘 ] 0과 1로만 구성된 흑백영상이 모두 0이면 괄호없이 0, 모두 1이면 괄호없이 1을 출력한다. 이때, 흑백영상을 자르는 기준을 왼쪽위,..

📑 백준[자바]_10986_나머지합_구간합

오늘은 누적합 카테고리 중에서 네번째 골드 문제를 풀었다. 이전에 구간합에 대한 개념을 정리하고 동적계획법을 풀면서 모듈러연산의 분배법칙을 익혀두었더니 다른 골드문제에 비해 쉽게 풀렸던 것 같다. [ 문제풀이 & 접근 ] 시간 초과가 나지 않기 위해서는 구간합을 구해야 하는데, 1차원 배열의 경우 dp[k]를 0~k까지의 구간합이라 하고, i

📑 XML_Naver검색API_국비DAY71

웹을 구현하는 프로그래밍 언어는 굉장히 다양하다. 하지만 프로그래밍 언어마다 사용하는 데이터 타입이 다르기 때문에 서로 다른 언어끼리는 직접적인 통신이 불가능하다. 그렇다면 어떤 방식으로 하나의 웹 서버에서 다른 언어로 구현한 데이터들을 송수신할 수 있을까? 이를 해결하기 위해 공통 DataType을 가지는 XML과 JSON이 존재한다. 서로 다른 언어들은 직접적으로 통신을 할 수는 없지만 아래 그림과 같이 공통 DataType인 XML과 JSON을 거치게 되면 서로 통신할 수 있도록 서비스를 제공한다. 오늘은 XML을 pharsing해보는 실습을 해보기 위해서 네이버에서 제공하는 검색 Open API를 사용해보겠다. [ Naver 검색 Open Api사용하기 ] 다음 사이트에 접속한다. https://..

📑 백준[자바]_16139_인간컴퓨터상호작용_누적합_구간합

오늘은 백준 단계별로 문제풀기에서 누적합으로 분류된 문제를 풀이하겠다. 이전에 구간합에 대해 정리한 내용이 있어서 쉽게 풀리겠지 하고 생각을 했는데, 아니나 다를까 틀렸다. ㅜㅜ 한 가지 간과한 사실을 인지하고 코드를 수정해서 정답을 맞추었다. 처음에 생각했던 알고리즘 접근 과정과 간과했던 부분, 수정한 부분을 정리하고자 한다. 구간합에 대한 내용을 아직 잘 모른다면 여기를 눌러서 공부하고 오기를 바란다. [ 접근 과정 : 오류 있는 코드] 이 문제의 입력값의 최악의 경우를 보면 어마무시하다. 문자열의 길이는 최대값이 200,000, 최대 문제의 수도 200,000개, 구간의 최대 길이도 200,000이다. 이 문제를 단순히 반복문 만을 이용해서 풀이한다면 볼것도 없이 시간초과가 날것이다. 그렇다면 시간..