전체 글 73

[백준] 13144번 -List of Unique Numbers (JAVA)

1 2 3 1 2에서 1개 이상의 수를 뽑았을때 나올 수 있는 경우의 수는 12가지이다. 여기서 포인트는 연속한 1개이상의 수를 뽑아야 한다는 것이다..! 이 문제는 두포인터 알고리즘을 이용해서 풀 수 있다. 한개의 포인터는 차례대로 늘리고 다른 하나의 포인터는 점점 늘리는 식으로 활용하는 것이다. | 투 포인터(Two Pointers)란? 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘 정렬되어있는 두 리스트의 합집합에도 사용됨. | 접근 방식 1. l 을 차례대로 늘리고 , r은 점점 늘리는 식으로 두 포인터를 활용한다. : 두 포인터는 안봐도 될 부분을 안 보기 위한 알고리즘이다. ex) 1 2 3 1 2 수열이 있을때 l = 1, r = 1 에서 r = 2, ..

[백준] 2343번 - 기타 레슨(JAVA)

예제 입력 9 3 // 강의 9개 , 블루레이 3개 1 2 3 4 5 6 7 8 9 // 각 강의마다 기타 레슨의 길이 예제 출력 17 블루레이 3개에 각각 1 2 3 4 5 / 6 7 / 8 9 씩 들어간다. 블루레이는 모두 같은 크기이어야 하므로 최소 크기는 17이 된다. 이 문제는 블루레이의 최소 크기를 찾는 문제이다. 빠르게 탐색하기 위해서 우리는 이분탐색을 사용할 수 있다. | 이분탐색(Binary Search)이란? : 정렬된 배열 또는 리스트에 적합한 고속 탐색 방법이다. 배열의 중앙에 있는 값을 조사하여 찾고자 하는 항목이 왼쪽 또는 오른쪽 부분 배열에 있는지를 알아내어 탐색의 버위를 반으로 줄인다. 찾고자 하는 값이 속해있지 않은 부분은 전혀 고려할 필요가 없기 때문에, 매 단계에서 검색..

[백준]1759번 - 암호 만들기 (JAVA)

| 문제 이 문제는 C개의 알파벳을 탐색하여 중복 없이 L개를 고르는 문제이다. 그러므로 백트래킹을 사용해야 한다는 의미이며 그 방법들 중 DFS를 사용할 것이다. ( * 백트래킹과 DFS 에 대한 자세한 설명은 이전 게시글에 설명해놓았다.) https://turtle8760.tistory.com/90 | 문제 접근 방식 1. L과 C를 입력받는다 (L: 암호의 자릿수 C: 암호로 사용했을 가능성이 있는 알파벳의 개수) : 최소 1개의 모음, 최소 두개의 자음이 포함된다. --> 모음자음 판별하는 메서드 생성 2. 알파벳이 사전 순으로 나열된다.(bac X abc O) --> Arrays.sort 사용한다. 3. 암호의 각 알파벳을 중복하지 않고 모든 경우의 수를 탐색한다. ( aaci (X) aciw(..

[백준]15650번 - N과 M(2) (JAVA)

| 문제 이 문제는 1~ N까지의 수를 탐색하여 M개를 고르는 문제이다. 그러므로 우리는 정해진 숫자범위에서 탐색을 해야한다는 의미와 같다. 또한 이 말은 즉 백트래킹을 사용해야한다는 뜻이다. | 백트래킹(Backtracking) 이란? 말 그대로 되추적한다 라는 의미이다. 좀 더 알고리즘적으로 설명하자면, 어떤 노드의 '유망성'을 판단한 뒤, 해당 노드가 유망하지 않다면 부모 노드로 돌아가 다른 자식 노드를 찾는 방법이다. 즉, 모든 경우의 수를 찾아보지만, 그 중에서도 가능성만 있는 경우의 수를 찾아보는 방법이다. 백트래킹의 방법은 여러가지가 있지만 이번 문제에는 DFS 라는 알고리즘을 사용하게 될 것이다. | DFS 란? Depth-First-Search 의 약자이며 깊이를 우선 탐색한다는 의미이다..

[백준]6588번 - 골드바흐의 추측(JAVA)

| 문제 이 문제를 풀기 위해서는 먼저 소수를 판별하는 알고리즘을 알아야 한다. 소수란 무엇이고 그 알고리즘은 어떤것인지 알아보자. | 소수 : 1과 그 수 자기 자신만을 약수로 갖는 자연수이다. | 에라토스테네스의 체 대량의 소수를 한꺼번에 판별하고 자 할때 사용하는 것이 바로 에라토스테네스의 체이다. 소수가 되는 수의 배수를 지우면 남은 수는 소수가 된다'라는 원리로 동작한다. [ 절차 ] 1. 원하는 숫자까지의 값을 초기화 해준다 (배열에 값 넣기) 2. 2부터 시작해서 특정 숫자의 배수에 해당하는 숫자들을 모두 지운다. (자기 자신을 제외한 배수를 지운다) 3. 이미 지워진 숫자의 경우 건너뛰고 진행한다. [ 알고리즘 ] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각..

[백준]10430번 - 나머지(JAVA)

| 문제 | 해결 이 문제는 사실 출력만 하는거라 어렵지 않았다. 출력방법은 Scanner, BufferedReader 둘 중 하나를 사용하여 해주면 될것 같다. *주의할 점 1. 한 줄에 한 개의 결과값을 출력해야 한다. 2. 나머지를 구해야하므로 변수를 int로 계산해야 한다. 먼저, 코드를 적기전에 왜 각각 두개의 식들이 같은지 증명을 하고 이해하면 좋을것 같아서 정리해보게 되었다. 위와같이 나머지와 연관된 식들을 모듈로 연산이라고 한다. | 모듈로 연산(Modulo Operation) - 어떤 한 숫자를 다른 숫자로 나눈 나머지를 구하는 연산으로, 나머지 연산(mod)이라고 한다. - A mod B 와 같은 형태로 표현한다. ( A % B = A mod B) 문제에서는 총 4개의 케이스가 나왔다...

JSP 팀 프로젝트 끝, 느낀점

드디어 두 달 만에 첫 프로젝트를 마무리하게 되었다!! 사실 끝나자마자 쓰려고 했으나 시간이 부족하여 국비과정이 완료되고 작성하게 되었다. 일단 한 문장으로 느낀 점을 표현하자면 "많이 아쉬웠던 프로젝트.." 인 것 같다. 몇 가지 아쉬웠던 점들이 있는데 적어보고자 한다. | 1. 미완성으로 끝난 프로젝트 스케일이 작은 프로젝트라도 완성을 했느냐 안 했느냐는 정말 중요한 것 같다. 직접 만들어서 완성시켜본 경험은 첫걸음마를 내닫는 사람들에겐 정말 중요한 것 같다. 나만해도 포트폴리오를 작성하는데 자신감이 많이 떨어졌고 아쉬움이 컸었다. | 2. 팀원들과의 커뮤니케이션 부족 예전부터 개발자는 혼자 일하는 것이 아니다. 같이 협동하여 잘 만들어진 프로젝트가 나온것이라고 여러 번 들었는데 처음엔 깨닫지 못했다..

프로그래밍/JSP 2022.04.19

Spring 5일차 : 스프링 웹 프로젝트 & 로그인, 회원가입

| 스프링 MVC 프로젝트의 기본 구성 스프링 MVC에서 어떤 단계를 거쳐서 실행되는지를 이해해야 문제 발생시 빠른 대처와 대안을 찾을 수 있다. 스프링 웹 프로젝트는 3-Tier(티어) 방식으로 구성한다. Presentation Tier(M) Business Tier(B) Persistence Tier(C) | Persistene Tier(영속 계층, 데이터 계층) -데이터를 어떤 방식으로 보관하고, 사용하는 가에 대한 설계가 들어가는 계층 - 일반적으로 DB를 많이 이용하지만, 상황에 따라서 네트워크 호출 혹은 원격 호출 등의 기술이 접목된다. | Business Tier(비즈니스 계층) =홈페이지를 만들어달라고 한 의뢰인 - 순수한 비즈니스 로직을 담고있는 영역 - 고객이 원하는 요구사항을 반영하는..

Spring 4일차 - 예외처리

스프링 없이 개발했을때 우리는 컨트롤러에서 예외가 발생했을때 매번 try catch문으로 예외처리를 해주었다. 그렇지만 스프링에서는 이 불편함을 스프링을 이용하여 한꺼번에 처리할 수 있다. 스프링에서는 @ExceptionHandler 와 @ControllerAdvice 를 이용해서 처리하게 된다. | @ControllerAdvice 말 그대로 컨트롤러에서 예외가 발생했을때 충고해 주는 곳이다. 해당 객체가 스프링의 컨트롤러에서 발생시키는 예외 처리하는 존재임을 명시해준다. (= 예외처리 여기로 다 모여~) 예외 사항을 전부 핸들링해야 한다면 중복적이고 많은 양의 코드를 작성해야 한다. 따라서 공통적인 에외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리한다 따로 예외들만 분리해서 관..

Spring 3일차 - 스프링 MVC

| Spring-Mybatis MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ? 로 치환되어서 처리된다. 복잡한 SQL의 경우 ?로 나오는 값이 제대로 전달 되었는지 확인하기가 쉽지 않고 실행한 SQL의 내용을 정확히 확인하기 어렵기 때문에 log4jdbc-log4j2 라이브러리를 사용하여 어떤 값인지 확인할 수 있다. | 로그 레벨 설정 테스트 코드 실행시 많은 양의 로그가 출력되기 때문에 불편할 수 있다. 이럴 때에는 로그의 레벨을 이용해서 수정해준다. resources/log4j.xml 파일에 있는 level 태그를 수정한다. (+추후에 추가 학습하자) ---------------------..