본문 바로가기

JAVA/자료구조, 알고리즘4

비트마스킹으로 BOJ 11723 해결하기 (기존코드와 리펙토링) 처음 풀었던 코드는 다음과 같다.처음에 봤을땐, 단순 구현이라고 생각했으나 O(n^2)문제를 해결하지 않으면, 시간초과가 나는 것 같아서 비트마스킹을 쓰지 않으면 시간 초과가 나는 것 같습니다. 비트마스킹을 사용하면, 탐색, 삽입등에서 O(1) 로 시간을 단축할 수 있습니다. 틀린코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;import java.util.*;public class Main { static ArrayList arr = new ArrayList(); public .. 2024. 8. 28.
자료구조 + 알고리즘 키워드 자료구조와 알고리즘을 공부할때 중요한 키워드를 정리해보았습니다. 자료구조 선형자료구조 배열, 스택, 큐, 리스트 비선형 자료구조 트리, 그래프, (연관 컨테이너) 알고리즘 (선형에서 주로 사용) 정렬 > N^2 > 버블... NlogN > merge sort : divide conquer combine quick sort .. 투 포인터 그리디 탐색 완전탐색(brute force) DFS 이진탐색 shortpath  1. 가중치가 없을 때  BFS,  2. 가중치가 있고, 음의 가중치가 없는데 시작점이 주어지면 다익스트라 3. 가중치가 있고, 음의 가중치가 있을때 벨만 포드 4. 가중치가 있고, 모든 시작점에서의 최소값(음의 가중치가 있어도 됨) 플로이드워샬  트리를 만드는 알고리즘  서로소집합, 세그먼.. 2024. 7. 24.
BFS visited 사용시점 visited 배열을 사용하는 것과 최소값 갱신 로직을 사용하는 것은 서로 다른 목적을 가지고 있습니다. 아래에서 각각의 차이점을 설명하겠습니다. visited 배열 사용: 목적: 중복 방문을 방지하여 불필요한 계산을 줄이고, 무한 루프를 방지합니다. 활용: 그래프나 맵에서 특정 노드나 위치를 방문했는지 여부를 체크합니다. 예시: 미로 찾기에서 특정 위치를 이미 방문했는지 확인하고, 이미 방문한 곳은 다시 방문하지 않도록 합니다. 효과: 중복 방문을 방지하여 탐색 속도를 향상시키며, 무한 루프를 방지하여 프로그램이 정상적으로 종료될 수 있습니다. 최소값 갱신 로직 사용: 목적: 최단 경로나 최소 비용을 찾을 때, 현재까지의 최소값을 갱신하며 탐색합니다. 활용: BFS나 다익스트라 알고리즘에서 최소값을 갱.. 2024. 1. 30.
JAVA BFS DFS 알고리즘 c++로만 구현했던 BFS와 DFS의 코드입니다. 자세한 설명은 아래 글을 참고해주세요. https://wannadev.tistory.com/96 BFS, DFS c++ - DFS란, 그래프 전체를 탐색하는 하나의 방법으로써, 하나의 가지(branch)를 모두 탐색한 이후에 다음 branch로 이동하는 방법이다. - 시작 노드에서 깊이가 커지는 방향으로 탐색을 진행하여 더 이 wannadev.tistory.com https://wannadev.tistory.com/116 BFS, DFS 활용 문제 고찰 BFS 문제를 많이 접하다 보니, BFS 문제 유형에 대해서 생각해보게 되었다. 나는 문제를 일반화 시키는 것을 선호한다. 만능은 없지만 정답에 가까워지기 편하기 때문이다. 먼저 그래프를 사용해 wanna.. 2024. 1. 15.