자바 102

[백준 1976번] 여행 가자 - java

문제 설명1. 첫번째 줄에 도시의 갯수가 주어진다.2. 그 다음은 여행 계획에 속한 도시의 수가 주어진다.3. 다음부터 그 줄의 도시가 어디랑 연결되었는지 주어진다.4. 마지막에는 여행을 가는 계획이 주어진다.풀이 과정1. 유니온 파인드 문제이다. 모든 도시가 연결되어 있는지를 파악한다.2. 주어지는 값들을 유니온해서(parent에 연결) 같은 루트에 있다고 맞춰준다.3. 이후로는 마지막에 주어진 계획 도시들이 다 같은 루트에 있는지만 파악하면 된다. 코드import java.util.*;public class Main{ private static int[] parent; private static int find(int x) { if (x == parent[x]) { return ..

[백준 19598번] 최소 회의실 개수 - java

문제 설명1. 첫째 줄에 회의의 갯수 N이 주어진다.2. 그 다음주터 N개의 회의 시작시간 - 끝나는 시간이 주어진다.3. 그 시간을 통해 모든 회의가 멈추지 않게 작동하는 회의실의 최소 갯수를 구하면 된다.풀이 과정 1. (내가 이렇게 풀어서 시간초과가 발생했었는데) 어떤 회의가 언제부터 언제인지를 알 필요는 없다. 2. 그냥 시작시간부터 회의실 하나의 자리를 차지하고 있고, 뭐가 됐든 나가는 시간에는 나간다는 것이다. 3. 그러니까 어떤 회의가 언제인지 알 필요는 없고, 언제 입장인지 언제 퇴장인지를 알면 된다. 4. 그러고 시간 순서대로 나열하면 회의실에 들어가 있는 회의의 갯수를 알 수 있다.  코드import java.util.*;public class Main { public static v..

알고리즘 공부 2024.11.26

[백준 1189번] 컴백홈 - java

문제 설명1. 첫째 줄에 맵의 크기랑 이동거리가 주어진다.2. .은 갈수 있는 곳, T는 장애물로 주어진다.3. 오른쪽 아래부터 시작해서 오른쪽 위까지 이동거리로 이동할 수 있는 경우의 수를 구한다.4. 한번 지나간 길로는 못간다.풀이 과정 1. DFS 문제이다. 2. 한번 지나갔거나, 장애물이 있는 곳은 true, 나머지는 false로 구한다. 3. 현재 위치에서 DFS할 때에 이동할 곳을 이동처리하고 그 DFS끝나면 다시 이동 가능하게 하면 된다. (가게 되면 방문한거니까) 코드/****************************************************************************** Online Java Compile..

알고리즘 공부 2024.11.16

[HackerRank] ctci-array-left-rotation java 풀이

문제 설명1. 배열의 요소들을 왼쪽으로 돌리는거다.2. 그리고 맨 뒤에 애는 오른쪽 끝으로 가는식  풀이 과정 1. 딱히 어려운 문제는 아니지만, 성능에 이슈가 있을 수 있다. 2. 간단하게 말하면 어디까지 가야할지를 확인하고 돌리면 된다. 3. 근데 그거를 매번 돌릴 필요 없고 얼마나 가면 되는지 알면 되는데, 어차피 배열 전체 크기는 정해져 있으니 갈 거리에서 배열크기 나머지를 구하면 이동한 변위가 된다.  public static List rotLeft(List a, int d) { int maxLength = a.size(); d %= maxLength; List ans = new ArrayList(Collections.nCopies(max..

알고리즘 공부 2024.11.08

[백준 1043번] 거짓말 - java

문제 설명1. 사람 수, 파티의 수가 첫 줄에 주어지고2. 둘쨰 줄에는 이야기의 진실을 아는 사람의 수와 번호가 주어진다.3. 그 다음부터는 파티의 갯수만큼 사람들이랑 그 사람의 번호가 주어진다.4. 진실을 아는 사람이 속한 파티나, 그 사람이랑 같은 파티에 한번이라도 참가한 사람이 있거나, 같은 파티에 참석한 점이 있는 사람이 한명이라도 있는 파티에서는 거짓말을 못한다.5. 거짓말 할 수 있는 파티 수를 구하면 된다. 풀이 과정 1. 유니온 파운드 문제이다. 2. 모든 사람의 관계를 조사해서, 진실을 아는 사람이 같은 유니온에 들어가있는지 파악하면 된다. 3. 사실 그렇게 어려운 문제는 아니겠지만(아니겠지?) 유니온 파인드에 관한 지식은 가지고 있어야 풀 수 있다. 한번 브루트포스로 풀어보려 했더니 당..

알고리즘 공부 2024.10.20

스트림 소개

정리 스트림과 컬렉션의 차이가 뭘까? 사실 회사에서 스트림을 쓰고 있는데 사용하면서도 이게 컬렉션보다 보기 편하고 쓰기 편하군ㅇㅇ 이정도 감상이었는데 이번에 확실히 감이 잡히더라 스트림 시작 여기서 제일 인상깊었고, 컬렉션과의 차이에 대해 쉽게 접근할 수 있었던게, 컬렉션의 주제는 데이터고 스트림의 주제는 계산 이라는 점이었다. 말하자면 컬렉션은 요소 저장 및 접근, 스트림은 그걸 가지고 계산하는 것이 주가 된다는 것이다. 그리고 스트림이 가진 두가지 중요 특징이 파이프라이닝 대부분의 스트림 연산은 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환함 lazy(결과값이 필요할 때에 계산하도록... 그니까 알아서 스트림의 중간/최종 연산을 통해 안쓸거는 안쓰게 하는 최적화 같..

이론 정리/java 2023.09.30

java의 HashMap과 해시 충돌(collision) 관련

java의 HashMap과 해시 충돌(collision) 관련 이거랑 이거를 먼저 읽고오는것도 괜찮다. HashMap의 collision 위에 글을 읽으면 알겠지만, hashMap은 key를 해싱시켜 저장한다. 즉 어떤 key가 들어왔을 때에 이를 변환시키게 되고, 당연한 일이지만 이 때에 같은 변환값을 갖는 해시 충돌은 반드시 일어날 수밖에 없다. 그러므로 이를 해결하기 위해 어떤 방식을 도입했는지에 대해 알아본다. -> 해결이란, 충돌을 아예 없애는 것이 아니라 최대한 줄이는 방법이다. 개방 주소법(open addressing) 간단하게 말하면 겹치면 다른곳에 저장하는 것이다. 만약 충돌이 발생하면 다른 주소에 값을 저장하는 식이다. 그리고 이 주소를 찾아가는 알고리즘도 여러 개가 있다. 선형 탐사법..

이론 정리/java 2023.08.23

동적 파라미터화

동적 파라미터화 여러 요구사항에 효과적으로 대응 가능한 방법. 아직은 어떤 식으로 동작할지가 결정되지 않은 코드 블록이고, 나중에 프로그램에서 실행된다. 문제 상황 1. 녹색 사과 필터링 enum Color { RED, GREEN }빨강, 초록 사과가 있다. 여기서 만약에 녹색 사과를 필터링하려 하면 if(GREEN.equals(apple.getColor())) { result.add(apple); }요렇게 쓸 것이다. 단점 만약 빨간사과, 노란사과, 검은사과 등등... 필터링 개수가 많아진다면? 저 if문이 계속해서 늘어나거나 또 빼짐에 따라 줄어들 수 있을 것이다. 2. 색의 파라미터화 위의 1에서의 단점을 해결하기 위함이다. public static List filterApples(List inve..

이론 정리/java 2023.07.12

TreeSet!!

TreeSet!! public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, java.io.Serializable {}TreeSet의 구조를 살펴보면 다음과 같다. 이는 AbstractSet, NavigableSet인터페이스를 구현하여 사용하고 있다. TreeSet은 이름처럼 Tree와 같은 구조를 가지고 원소들을 저장한다. 특징을 나열하자면 중복 불가 원소의 순서 보존되지 않음 집어넣은대로 들어가는게 아니라 알아서 트리 구조로 정렬시킨다. 요소를 오름차순으로 정렬한다. Thread-safe하지 않다. Red-Black-Tree TreeSet은 내부적으로 Red-Black-Tree를 사용하고 있다. 이게 뭘까...? Red-B..

이론 정리/java 2023.02.13