[PS] 백준3584: 가장 가까운 공통 조상 (Java)
CS/알고리즘2025. 1. 12. 19:02[PS] 백준3584: 가장 가까운 공통 조상 (Java)

문제https://www.acmicpc.net/problem/3584 풀이해시 + 그래프 탐색접근법“공통 조상” 이라는 키워드만 보고서는 유니온 파인드를 생각했습니다.그러나 “가장 가까운 공통 조상(Nearest Common Ancestor)”을 구하는 문제로써 Union-Find로 구할 시 루트노드가 나오기에 다른 방식으로 접근했습니다. 두 정점의 부모 노드만 탐색하면 되었기에 일반적인 그래프 탐색을 통해서 접근했습니다. (시간복잡도↓)트리 자료구조로는 인접리스트를 활용했고, 자식 노드가 아닌 부모 노드를 탐색해야 했기에 부모를 기준으로 자식노드를 담는게 아닌 자식 노드를 기준으로 부모 노드를 담았습니다.list.get(부모).add(자식) → list.get(자식).add(부모)a와 b 노드의 공통되..

25년 아홉수의 목표
Develop/SmallTalk2025. 1. 5. 17:3125년 아홉수의 목표

Intro매년 12월이 되면 남들처럼 "새해엔 이렇게 해야지!"라고 목표를 세우곤 합니다.올해도 물론 새해를 맞아 24년에 대한 회고와 25년에 임하는 마음가짐을 새해목표라는 형태로 정리해보았습니다. 과거 편입을 준비할때 "목표를 세웠다면 최대한 주변에 공유해서 나의 목표를 알려라. 돌이킬수 없게" 라는 글을 본적이 있어요.실제로 많은 사람에게 말했고, 제 목표가 언급될 때마다 다시금 마음을 다잡을 수 있게 도와주었어요.이번에도 목표를 공유함으로써 "나라는 사람은 이렇게 성장해 갈거다."라고 넌지시 던지며 주변사람들에게 예측가능성을 주고 싶었다랄까요. 또한 작년까진 하지 않았던 지난 한 해의 회고와 잘한 점, 못한 점에 대해서도 작성을 해보았는데 가볍게 공유해볼게요.24년은 어땠어크게 어떤것들을 경험했고..

[회고] 내게 스터디란 (With 스터디 방식)
Develop/SmallTalk2024. 12. 24. 18:46[회고] 내게 스터디란 (With 스터디 방식)

알고리즘 스터디는 작년부터 시작해서 다양한 스터디에 참여하고, 주도하면서 꾸준하게 진행하고 있는 것중에 하나입니다.첫 스터디부터 어떤 방식으로 하는게 좋을지, 인원은 어느정도가 적당한지, 수준은 어떻게 고려해야할지 많은 고민을 했고, 시행착오를 거쳐왔었습니다. 최근에 진행하고있는 알고리즘 스터디 '에러줍는 4인방'에서 스터디를 진행하면서 방식이 되게 좋고, 많이 성장하고 있다는 걸 느껴 알고리즘 스터디에 대한 하나의 가이드라인 느낌으로 정리해보려합니다.처음 시작SSAFY 수료 이후 코딩테스트 대비를 위한 스터디로 시작했었습니다.알고리즘을 좋아하고 꾸준히 할 수 있는 사람들을 모으다보니 4명 구성으로 시작하게 됐어요.함께 모여서 어떻게 진행할지 얘기를 하다보니 다음과 같은 공통점이 보이더라구요.1. 시간을..

[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)
CS/알고리즘2024. 12. 3. 05:16[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)

Union-Find?분리 집합이라고도 불리는 유니온 파인드는 그래프 형태의 자료구조에서 정점들의 연결 정보를 알고 싶을 때 사용하는 알고리즘입니다.분리 집합이라고 불리는 이유는 서로 연결된 정점들을 각각의 집합으로 만들기 때문입니다. DFS(BFS) VS Union Find그래프 형태의 자료에서 연결 정보를 알고 싶을 때 DFS, BFS 탐색을 통해서도 알 수 있습니다.그러나 서로 다른 모든 정점의 연결정보를 구하려면 시간이 오래 걸릴 수 밖에 없습니다.10만개의 정점이 있고, 모든 정점이 서로 연결되있을수도 있다면 두 정점의 연결관계를 탐색하는데 최대 10만번의 탐색이 이루어질 수 있기 때문입니다.또한 이러한 연결관계 탐색이 N번 필요하다면 O(N^2)의 시간이 필요합니다. Union Find를 사용하..

Language/Java2024. 11. 28. 02:02자바 표준 라이브러리 (지속 업데이트)

자바에는 기본적으로 제공되는 표준 라이브러리들이 있다.JDK 안에 포함되어 있음.알고리즘 및 코딩테스트를 공부하면서 라이브러리에 취약한 것 같아 스니펫 느낌으로 작성.표준 라이브러리 종류Java.lang객체, 클래스, 시스템, 쓰레드, 예외 처리 등과 같은 핵심 기능 포함.자동으로 Import 됨.Java.util컬렉션 프레임워크를 포함한 날짜와 시간 처리, 이벤트 모델, 난수 생성, 기본 유틸리티 클래스 등 다양한 유틸리티 클래스와 인터페이스를 제공.Java.io입력과 출력(I/O) 기능을 담당하며, 파일 읽기와 쓰기, 데이터 스트림 처리 등을 위한 클래스와 인터페이스를 포함Java.math고정밀도 연산을 지원하는 BigInteger, BigDecimal 등의 클래스를 포함Java.lang 패키지1. ..

[자료구조] 세그먼트 트리
CS/알고리즘2024. 11. 27. 22:57[자료구조] 세그먼트 트리

세그먼트 트리구간 쿼리(Query)와 업데이트를 효율적으로 처리하기 위한 트리특정 구간의 합, 최소값, 최대값 등을 빠르게 계산. O(logN)범위 합 구하기, 구간 최소값/최대값 구하기누적합의 경우 합계를 구할 때만 사용할 수 있고, 특정 값이 업데이트될 경우 나머지 값들도 모두 업데이트가 되어야 함.세그먼트 트리의 경우 구간내의 다양한 값들을 구할 수 있고, 업데이트될 경우 몇개의 수만 업데이트하면 됨. 즉, 구간내의 다양한 값(최대값, 최소값)과 업데이트가 빈번하게 일어날 경우, 누적합이 아닌 세그먼트 트리 사용세그먼트 트리 초기화배열에 대해 세그먼트 트리를 형성하기 위해서는 이분탐색과 비슷한 느낌으로 2개씩의 합을 구하고, 구한 합에 대해 또 2개씩 합을 구하며 최종 한 개의 합까지 구합니다.만약..

CS/알고리즘2024. 11. 26. 23:34[자료구조] 트리의 특성과 종류, 구현

그래프그래프는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조여러 요소(정점) 간의 관계를 나타내기 위해 사용구성요소로는 정점, 간선, 가중치가 있음.분류방향 그래프(Directed Graph): 간선에 방향이 있습니다. (A,B)는 A→B를 의미하며, B→A는 별개의 간선으로 취급됩니다.무방향 그래프(Undirected Graph): 간선에 방향이 없으며 (A,B)와 (B,A)가 동일합니다.가중치 그래프(Weighted Graph): 간선에 가중치가 포함된 그래프입니다.비가중치 그래프(Unweighted Graph): 간선에 가중치가 없는 그래프입니다.트리계층적 구조를 표현하는 특수한 형태의 그래프무방향이면서 사이클이 없는 연결 그래프임의의 두 정점을 연결하는 Simple Path가 유일한 ..

CS/알고리즘2024. 11. 23. 22:28[TIL] 다익스트라 : 가중치로 0이 들어온다면

참고 문제https://www.acmicpc.net/problem/17182 포스팅 목적플로이드 워셜과 다익스트라의 개념을 알고 있다면 두 개를 혼용해서 사용할 수 있는걸 알 수 있습니다.그래서 위 문제 풀이를 위해 플로이드 워셜이 아닌 다익스트라를 N번 수행했습니다.다익스트라 코드는 평소와 같이 작성을 했지만 제출했을 때 메모리 초과가 발생하여 이유를 찾는 과정에서 다음번에도 실수할 수 있을 것 같은 반례를 찾아서 기록하기 위해 작성합니다.최초 다익스트라 코드static void Dijkstra(int start) { PriorityQueue pq = new PriorityQueue(((o1, o2) -> o1[1] - o2[1])); pq.offer(new int[]{start, 0}); ..

image