java 109

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

[백준 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

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

[백준 1461번] 도서관 - java

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

알고리즘 공부 2022.03.29

[백준 15810번] 풍선 공장 - java

문제 설명 1. N명의 스태프, 만들어야 하는 풍선M이 주어진다. 2. 각 N명의 스태프가 1개의 풍선을 부는 데 들어가는 시간이 주어진다. 3. M개의 풍선을 만드는 최소시간을 구하라 풀이 과정 1. 이분탐색이다. 2. 이분탐색 -> Long타입에 주의하자...허헣 풀이방법 자체는 이전하고 별반 차이는 없다. - 몇 분의 시간이 주어지고, 해당 시간동안 몇개의 풍선을 불 수 있는지 구하면 된다. 3. 왼쪽 -> 0으로 시작하면 된다. 4. 오른쪽 -> 풍선 부는데 제일 오래걸린 시간 * 풍선 개수면 일단 가장 오래걸리는 시간이 구해진다. 5. 만약 3, 5, 6분마다 한개씩 풍선을 만든다고 가정하면 7분이 주어지면 각각 2, 1, 1개를 만들것이다. 6. 현재 시간에 분 최대 풍선개수가 원하는 개수보다..

알고리즘 공부 2022.03.26

[백준 2792번] 보석 상자- java

문제 설명 1. 인원수 N, 보석의 색깔수 M이 주어진다. 2. M가지 색에 대해 각각의 개수가 주어진다. 3. 이 M개의 보석을 N명의 학생에게 나누어 줄 때, 모든 인원에게 나누어 줄 수 있는 최소 보석 개수를 구해주면 될것이다. 풀이 과정 1. 이분탐색이 어려워서 공부하기 위해 하나 더 풀어보았다. 이전문제에서 공부했어서 풀이 자체는 금방 도출했는데... 이번에는 뭔가 구현이 어려웠다. 더 풀어봐야 할 것 같다. 2. 중요한 값들에 대해 이야기하자면 A. 주어지는 보석개수의 차이가 아니라 개수 자체에 관한 문제라는것 -> 그냥 보석을 N명에게 모두 나누어 줄 수 있는 최소개수를 가지면 된다. B. 아예 보석을 못받는 학생이 있어도 괜찮다는것 -> 학생수보다 주는보석방법의 개수가 작거나 같으면 싹다 ..

알고리즘 공부 2022.03.26

[백준 2343번] 기타 - java

문제 설명 1. 강의의 수 N, 블루레이 녹화 개수 M이 주어진다. 2. N에 맞추어 강의가 하나씩 주어진다. 3. N개의 강의를 M개로 나누어 저장할 수 있는 가장 최소의 분단위를 구하면 된다. 풀이 과정 1. 이분 탐색 문제이다. 실버1 난이도인데 나는 왜이리 이분탐색이 어려운지 모르겠다... 2. 중요한 값들에 대해 이야기하자면 A. N개의 강의를 M개로 나누어 담는다는것 -> 한 개의 블루레이의 크기를 늘리고 줄이며 담을 수 있는 강의를 만들어가면 될것. B. 블루레이는 모두 같은 크기를 갖고, 최소의 크기로 만들어야 한다는것 -> 이분탐색을 M개의 값을 갖자마자 나가지 말고 그 최소를 구할것 이다. 3. 먼저 M은 N보다 작거나 같으므로 최소 블루레이 크기는 최대 길이 강의로부터 시작할 것이다...

알고리즘 공부 2022.03.26