분류 전체보기 189

📑 백준[자바]_분할정복_1780_종이의 개수

오늘은 저번시간에 이어서 분할정복 문제를 풀었다. 분할을 2개로 하는 것이 아닌 3개로 하는 것이기 때문에 조금 까다로울 수 있지만, 이전에 분할정복을 사용한 별찍기 문제를 한 번 풀어보았더니 이 문제는 비교적 쉽게 접근하여 풀 수 있었다. 이 문제를 풀이해보셨다면 아래의 문제도 풀어보시면 좋을 것 같다. basecase만 바꿔주면 된다. https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net [ 문제 풀이 ] 종이에 적힌 ..

📑 Spring 학습 Day2_개발환경 구축

Java 설치 JDK 1.8설치 cmd창을 열고 java - version을 입력해보면 설치한 자바의 버전 정보를 확인할 수 있다. STS 설치(https://spring.io/tools) Eclipse + Spring Plugin IDE툴이란 통합 개발환경으로 코딩, 디버그, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경 스프링을 개발하기 위해서는 개발에 필요한 Spring plugin 설치 Eclipse이외의 tool에서도 가능하다. 본인의 OS에 맞는 IDE 버전을 설치 버전이 tools4로 업그레이드 되면서 .jar파일로 바뀌었는데 당황하지 말고 압축을 풀어준다. 그러면 contents.zip파일이 존재하는데 이 파일까지 압축을 풀어주면 실행파일이 나타난다. T..

📑 Spring 학습 Day1_개요 및 특징

[ Spring의 개요 및 특징 ] 스프링 프레임워크 (Spring FrameWork) 프레임 워크는 개발자가 맨 손으로 개발을 시작하지 않도록 기본적인 골조를 제공해주는 것이다. 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로 줄여서 스프링이라고 불린다. 애플리케이션 프레임워크 특정 계층이나, 기술, 업무 분야에 국한되지 않고 전 영역을 포괄하는 범용적인 프레임워크를 뜻한다. 경량급 프레임 워크 단순한 웹 컨테이너에서도 엔터프라이즈 개발의 고급기술을 대부분 사용할 수 있다. 이전 세대에서 사용하던 EJB를 주 프레임 워크로 사용할 때 불편했던 점들을 해소했다. 엔터프라이즈 개발에 용이 개발자가 복잡하고 실수하기 쉬운 low level에 대한 관심을 줄이고, 비즈니스 로직(실제 컨트롤러의 역할) 개..

📑 RSA 암호화 방식을 이용한 로그인 처리

프로젝트를 진행하는 와중에 이번에는 필자가 로그인을 담당하게 되었다. 평소에 다른 학원 사람들과 꾸준히 세미 프로젝트를 해왔어서 그런지 단순한 로그인 기능 구현은 어려움이 없었다. 후에 소셜 로그인은 팀원들과 함께 공부하여 함께 구현해보기로 했는데, 회의날까지 약간의 시간이 남아서 로그인 처리에 대한 보안을 조금 강화하고자 한다. 이를 위해 SSL을 구현해볼까 고민해보았지만,, 최대한 돈이 들지 않는 범주에서 하기 위해서 RSA를 구현해보기로 했다. 그렇다면 RSA에 대해서 한 번 정리하고 코드에 대한 리뷰를 보도록 하자. [ RSA ] RSA란 암호화와 인증을 할 수 있는 공개키 암호 시스템이다. 이것저것 자격증을 공부하면서 많이 들어보았는데, 이렇게 직접 구현해보니 느낌이 색달랐던 것 같다. 이것은 ..

📑 완전 탐색(Brute Force)

모든 문제를 푸는 데에 있어서 가장 쉽고 간단한 방법을 짚고 넘어가겠다. 원래는 다른 탐색 알고리즘을 정리하기 전에 먼저 한 번 짚고 넘어가야 했지만,,, 은연중에 쉽다는 생각에 미뤄두었었다. 하지만 최근에 완전탐색 문제를 풀다가 제대로 깨진적이 있어서 정리하고 넘어가려고 한다. 단순하게 생각하면, 가능한 경우의 수를 일일이 모두 다 탐색해보는 것이다. 정확도는 100%에 달하는 유용한 방법이지만 세상에 좋은 기능만 있는것이 어디 있겠는가... 정확도가 증가하는 것에 비례하게 시간이 증가한다. 그렇기 때문에 정확도를 높게 유지한 상태로 코드를 문제에 맞게 조건을 걸어서 최적화를 해주어야 한다. 한 가지 간단한 예시를 들어보겠다. 사실 브루트 포스가 어려운 이유는 바로 후자, 조건에 맞게 코드를 최적화하면..

📑 MyBatis_SubQuery_국비Day75

초기 프로젝트에 mybatis설정하는 순서 [복사해오는 경우 안 쓰는 내용을 수정하지 말고 모두 삭제해서 새로 만들자.] mybatis라이브러리 셋팅하기 (WEB-INF) context.xml파일 가져오기 (META-INF) sqlMapConfig.xml과 mapper파일 ~~.xml을 생성한다. (복사하는 경우 mapper파일의 명령은 모두 지우자.(에러가 발생할 가능성이 있음.)) MyBatisConnector 생성하기 -> SqlSessionFactory를 만들어 주는 객체 [ mybatis를 사용한 서브쿼리 구현하기 ] 1. dept_list가 호출되면, dept테이블에서 읽어온 deptno, dname, loc데이터를 dept_map으로 포장해서 반환한다. 2. 1에서 반환한 dept_map을 ..

📑 백준[자바]_11279_1927_우선순위큐

오늘은 우선순위큐에 대한 기본적인 문제를 풀어보았다. 혹시라도 우선순위큐를 처음 들어본 사람은 아래의 링크로 들어가서 정리된 내용을 한 번 공부하고 오길 바란다. https://cm-me0410.tistory.com/79 우선순위큐(Priority Queue) 오늘은 다익스트라 문제를 본격적으로 풀어보기 전에 먼저 그래프 문제에서 자주 사용하는 우선순위 큐라는 자료구조에 대해 정리를 해보겠다. 결국에 큐이기 때문에 add, poll, peek 등의 연산을 cm-me0410.tistory.com 오늘도 마찬가지로 한 문제을 풀이하려 했지만, 카테고리에 분류된 처음 두 문제가 너무 비슷하고 기본적인 문제이기 때문에 두 문제를 모두 풀이하도록 하겠다. 문제에 대한 링크를 아래에 걸어두도록 하겠다. 우선순위큐 ..

📑 백준[자바]_14502_BFS_DFS_연구소

오늘은 BFS문제를 풀이해보았다. 요즘 시간에 뒤쫓기며 계속 더 어려운 알고리즘, 아직 모르는 개념을 공부하는데만 몰두했었다. 오랜만에 탐색문제를 풀었는데, 생각보다 잘 풀리지 않았다. 그래서 위로만 올라가려고 하지 않고, 기본부터 단단히 잡으면서 가려고 한다. [ 문제 접근 ] 바이러스가 퍼지기 전에 3개의 벽을 세워서 바이러스가 퍼지지 않도록 반드시 막아야 한다. 바이러스를 차단한 경우 남아있는 안전지대의 영역 수를 최대로 만들어야 한다. 벽을 세우는 경우의 수는 어떻게 할 수 있을까? 바이러스가 퍼지는 과정은 어떻게 포함할까? 문제를 풀기전에 혼자 생각을 해보았을 때, 벽을 세우는 경우의 수를 구하면 이 중에서 바이러스를 막을 수 없는, 즉 안전지대가 0인 경우의 수가 존재할 수도 있을 것이다. 그..

📑 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..