전체 글 405

List와 Set의 차이점, 활용

List랑 Set의 차이가 뭘까?? 그리고 둘의 차이점에서 어떤 활용이 가능할까?? 이에 대해 알아보려고 한다. 1. List는 순서가 존재하고 Set은 순서가 없다. 예전글에서 LinkedList와 ArrayList의 차이를 알아보았다. 여기서 중요한 내용중 하나로 나온것이 바로 '순서’이다. List는 순서를 가지며, 데이터가 이 순서에 맞추어 쌓아진다. 코드를 통해서 확인해보자 public class Main { public static void main(String args[]) { ArrayList fact = new ArrayList(); fact.add("ryoo"); fact.add("chan"); fact.add("is"); fact.add("genius!"); fact.add("He")..

이론 정리/java 2022.04.06

abstract class와 interface에 관하여

abstract class 이름에서 알 수 있듯, 추상 클래스는 선언만 하고 실제 구현부는 작성하지 않은 상태로 남겨둔 클래스이다. 추상 클래스는 다음과 같은 특징을 갖는다. new메소드를 사용하여 객체를 직접 생성할 수 없다. 구현부가 실제로 없기 때문에 자식 클래스에서 구현하게 된다. 그리고, 이 구현은 무조건 이루어져야 한다. 이 메소드 내에는 추상 메소드가 존재하며, 이 메소드를 자식 클래스에서 구현한다. 추상 클래스는 간단히 말하자면 미완성 설계도라고 생각하면 된다. 예를 들어 개, 고양이, 소, 말, 돌고래 라는 동물들이 있는 경우 추상 클래스로 동물을 선언해주면 동물이 갖는 공통의 특성을 아래에서 하나씩 사용할 수 있다. 동물(추상 클래스) 걷기 뛰기 숨쉬기 이 뛰는 방식, 걷는 방식, 숨쉬..

이론 정리/java 2022.04.06

[백준 2631번] 줄세우기- java

문제 설명 1. N개의 학생이 있다. 2. 학생들을 키순서대로 세워야 한다. 3. 키순서로 세우기 위해 이동시켜야 하는 학생의 최소 숫자를 구하면 된다. 풀이 과정 1. DP를 통해서 진행한다. '가장 긴 증가하는 부분 수열' 문제의 알고리즘을 적용해야 한다. 이전 문제를 풀어봤으면 사실 그 하위호환 문제이다. 근데왜 같은 골5...? 2. 옮길 학생이 아니라, 움직이지 않을 학생수를 구하자! 예를 들어 여기 문제처럼 3 7 5 2 6 1 4 를 보면 가장 긴 증가하는 부분 수열로 구하면 3 - 5 - 6 이렇게 학생들을 보면 얘네가 가장 긴 증가하는 부분 수열이고, 움직이지 않을 최대 숫자이다. 3. 그럼 이제 나머지 애들을 움직여주면 된다. 코드

알고리즘 공부 2022.04.06

[백준 2565번] 전깃줄- java

문제 설명 1. N개의 전깃줄이 있고, 이 전깃줄은 A전봇대와 B전봇대를 연결한다. 2. 전깃줄은 교차되는 경우가 있고, 교차되어서는 안된다. 3. 그렇기 때문에 교차되는 전깃줄을 없애주어야 한다. 4. 교차되는 전깃줄이 없도록, 전깃줄을 제거해주는 최소 개수를 return하면 된다. 풀이 과정 1. DP를 통해서 진행한다. 처음에 생각하는것이 조금 어려운데 '가장 긴 증가하는 부분 수열' 문제의 알고리즘을 적용해야 한다. 2. 위의 그림을 통해 확인해 보면, A전봇대의 숫자에 대해 오름차순으로 정렬한 후, 이곳에서 B와 연결할 때에 큰 위의 가장 긴 증가하는 부분 수열을 적용하면 교차하지 않는 전선의 개수를 구할 수 있게 된다. 그 이유에 대해 말하자면 A 처음 전봇대 기준으로 만약 1 - 8 이 연결..

알고리즘 공부 2022.04.06

[백준 23352번] 방탈출 - java

문제 설명 1. NxM크기의 격자판이 주어진다. 2. 상하좌우로 움직일 수 있으며, 각 방의 이동은 최단 경로로 움직인다. 3. 이렇게 최단 경로로 움직여서 가장 먼 거리를 움직이면, 그 시작점과 도착점이 비밀번호가 된다. 4. 가장 먼 거리가 여러개면 그 중 시작점과 도착점의 합이 큰 것이 비밀번호가 된다. 풀이 과정 1. 최단 경로 -> BFS 그냥 공식처럼 외워서 진행하자. 2. 우리는 어디서부터 시작하는게 최고로 가까울지 모른다. 그러므로 모든 점에 대해 그곳부터 시작하는 경우를 싹 다 구해야 할 것이다. 이 말은 완전탐색 + BFS로 진행해야 한다는 것이다. 3. BFS를 통해 나아가면서, 해당 위치가 마지막인지 어떤지 모르므로 매번 거리를 재서 진행하는것이 속편할 것이다. 이는 BFS여서 쉽게..

알고리즘 공부 2022.04.05

Git 커밋 컨벤션

깃의 커밋 진행 시 가독성 향상과 협업을 위해, 일관성 있고 원칙을 가진 커밋 메세지를 작성할 필요가 있다. Commit 메세지 구조 Title(제목) type subject Body(본문) Footer(optional)(꼬리말) 제목, 본문, 꼬리말 세 파트로 나누며, 각 파트는 빈칸으로 구분된다. type : subject body footerCommit Type 제목을 구성하는 Type의 경우 어떠한 이유로 커밋을 진행했는지 적는다. 보통의 경우 type의 맨 앞 글자는 대문자로 적는다. Type description Feat 새로운 기능 추가 Fix 버그 수정 Docs 문서 수정 Refactor 코드 리펙터링 Test 테스트 코드, 리펙토링 테스트 코드 추가 Chore 빌드 업무 수정, 패키지 매..

Java의 Optional 클래스

자바 사용중 가장 많이 만나는 에러 중 하나가 바로 널 에러이다.(NPE - Null Pointer Exception) 개인적으로 Springboot의 JPA를 사용해서 값을 가져올 때에 이 null처리에 많은 신경을 써야 한다고 생각한다. Java8 이전까지 NPE를 해결하기 위해서는 두 가지들 중 하나를 택해야 했다. 예외 출력 예외를 던지는 것인데, 이것은 정말 예외가 발생하는 상황에 사용하도록 한다. null 반환 null을 실제로 받아오는 것으로, 클라이언트에서 별도로 처리해야 한다. 이런 식으로 처리하였는데, 이 로직을 수행하는 데에 코드가 복잡해 질 수도 있기 때문에 초기값을 사용하는 경우도 있었다. Java8 버전부터 Optional클래스를 사용하여 이 NPE를 해결할 수 있도록 도와준다...

이론 정리/java 2022.04.03

싱글톤(Singleton) 패턴에 관하여

Singleton Pattern이란, 어플리케이션 실행 시 최초 한번만 메모리를 할당하고, 이 메모리에 인스턴스를 만들어서 사용하는 디자인 패턴이다. 주로 DBCP(DataBase Connection Pool)처럼 공통 객체를 여러개 생성해서 사용해야 하는 경우 쓴다. 싱글톤 패턴의 장점 위에서 설명했듯, 싱글톤 패턴은 어플리케이션 실행 시 단 하나의 인스턴스를 한 번만 할당하게 된다. 따라서 만들어진 메모리 영역에 new연산자를 통해 접근하게 되면 이 접근에 대해 메모리 낭비를 방지할 수 있게 되며, 처음에 실행 시 만들어진 인스턴스에 접근만 하면 되므로 속도 측면에도 이득이 있다. 그리고 클래스 간 데이터 공유를 원할하게 해 준다. 싱글톤 패턴으로 만들어진 인스턴스는 static 전역 변수이기 때문이..

이론 정리/java 2022.04.03

필터와 인터셉트

필터와 인터셉트 게시판을 만들 때, 만약 해당 페이지의 가입자만이 사용할 수 있는 '회원게시판' 을 구현하려고 한다면 단순히 해당 게시판에 들어가는 것 뿐만이 아니라 이와 관련된 모든 부분(글쓰기, 읽기, 마이페이지 등등...) 에서 모두 로그인 로직을 검사해야 할 것이다. 그렇다면 이 로직은 어떻게 만들까?? 먼저 매번 모든 페이지에 해당 로직을 구현해서 넣어준다면...너무 귀찮고 문제 발생 가능성도 높을 것이다. 이럴 때에 사용하는것이 바로 필터와 인터센터이다. 해당 두 가지 방법을 통해 위의 방법을 구현해 낼 수 있다. 먼저 두 방식의 차이는 아래와 같다. 그림을 통해 알 수 있는사실은 Filter은 DispatcherServlet의 앞에서 이루어진다. Interceptor은 Disp..

이론 정리/java 2022.04.02

[백준 1461번] 도서관 - java

문제 설명 1. N권의 책, 한번에 들수있는 양 M이 주어진다. 2. 현재 위치 0으로부터 해당 책이 들어가야하는 위치가 N개 주어진다. 3. 모든 책을 원래 위치에 가져다 놓는 최소 거리를 구하라. 4. 마지막 책을 가져다가 두면 더이상 0위치로 돌아올 필요는 없다. 풀이 과정 1. 그리디 문제이고, 문제 풀이를 떠올리는것은 힘들지만 구현은 쉬운 문제이다. 2. 중요한 것은 거리가 +, - 두 가지로 주어진다는 것이고, 0의 위치를 지나가기 때문에 각각의 이동이 따로따로 행해져야 한다는 것이다. 3. 그리고 어느 쪽이든 가장 먼곳까지 갔다가 돌아오면 된다. 4. 마지막 책을 갖다 놓았을 때 더이상 0의 위치로 돌아올 필요는 없으니, 가장 먼곳에 마지막으로 책을 가져다 두면 될것이다. 5. (2)번의 문..

알고리즘 공부 2022.03.29