[알고리즘] 데이크스트라(Dijkstra)
CS/알고리즘2023. 12. 9. 18:27[알고리즘] 데이크스트라(Dijkstra)

Intro어떤 정점으로부터 모든 정점들로의 최단 경로를 구하는 문제는 최단 경로 알고리즘을 적용해서 정해를 구할 수 있다.이 때 사용되는 최단 경로 알고리즘으로는 아래와 같다.다익스트라(Dijkstra) 알고리즘벨만-포드(Bellman-Ford) 알고리즘플로이드-워셜(Floyd-Warshall) 알고리즘아래 표는 최단 경로 알고리즘 3가지의 각 차이점에 대해 참고할 수 있도록 생성형 AI를 통해 생성한 자료구분다익스트라(Dijkstra)벨만-포드(Bellman-Ford)플로이드-워셜(Floyd-Warshall)목적단일 출발점에서 다른 모든 정점까지의 최단 거리단일 출발점에서 다른 모든 정점까지의 최단 거리모든 정점 쌍 간 최단 거리음수 가중치❌ 불가능 (음수 간선 있으면 오동작)✅ 가능✅ 가능음수 사이클..

[알고리즘] 최장 증가 수열 (LIS, Longest Increasing Subsequence)
CS/알고리즘2023. 12. 8. 17:42[알고리즘] 최장 증가 수열 (LIS, Longest Increasing Subsequence)

Concept 어떤 임의의 수열이 주어질 때, 이 수열에서 몇 개의 수들을 제거해서 부분수열을 만들 수 있다. 이때 만들어진 부분수열 중 오름차순으로 정렬된 가장 긴 수열을 최장 증가 부분 수열이라 한다. 아래와 같은 수열이 있을 때 오름차순으로 정렬된 부분 수열은 1,3,5 1,3,4 3,5 1,2,4 등과 같이 존재하며, 해당 수열에서 최장 증가 부분 수열은 3 Feature 이러한 LIS의 길이를 구하는 방법 중 단순한 접근법은 Brute-Force방법으로 수열의 총 길이가 K라고 가정할 때 1개 이상의 원소를 가지는 모든 부분수열의 경우의 수는 2^K개로 모든 부분 수열의 오름차순 정렬을 확인하는 것은 시간이 매우 오래 걸린다. LIS의 길이를 구하는 최적 방법에는 2가지가 있다. 다이나믹 프로그..

[PS] 백준20165 : 인내의 도미노 장인 호석(Java)
CS/알고리즘2023. 12. 8. 11:13[PS] 백준20165 : 인내의 도미노 장인 호석(Java)

문제 https://www.acmicpc.net/problem/20165 20165번: 인내의 도미노 장인 호석 사람을 화나게 하는 법은 다양하다. 그 중에서도 악질은 바로 열심히 세워놓은 도미노를 넘어뜨리는 것이다. 이번에 출시된 보드 게임인 "너 죽고 나 살자 게임"은 바로 이 점을 이용해서 2명이 www.acmicpc.net 풀이 역시 구현+시뮬레이션 답게 장황한 문제의 지문에 조금 당황했지만.. 이해하고 나면 막상 수월하게 풀이가 가능했던 문제 해당 문제에서 핵심 로직 : 공격에 관한 상태배열 관리 입력의 방향은 Switch~case문으로 처리. 시작 좌표 큐에 추가. while문을 수행하면서 큐에서 꺼낸 좌표에 대해 로직 수행. 큐에서 꺼낸 좌표의 상태값이 0이라면(넘어져있는 경우) contin..

[알고리즘] 배낭 문제(Knapsack Problem)
CS/알고리즘2023. 12. 8. 09:41[알고리즘] 배낭 문제(Knapsack Problem)

Concept 한 여행가가 가지고 가는 배낭에 담을 수 있는 무게의 최댓값이 정해져 있고, 일정 가치와 무게가 있는 짐들을 배낭에 넣을 때, 가치의 합이 최대가 되도록 짐을 고르는 방법을 찾는 문제 Feature 배낭 문제에는 두 가지 유형이 존재 Fractional Knapsack : 물건을 쪼갤 수 있음. 무게나 가치가 소수점 단위로 나뉠 수 있는 문제. 0-1 Knapsack : 물건을 쪼갤 수 없음. 무게나 가치가 무조건 정수타입을 가지는 문제. Implement Brute-Force 가장 기본적인 풀이방법으로써 N개의 물건에 대해 가능할 수 있는 모든 조합을 만들어 보는 접근법. 시간복잡도는 O(2^N)으로 많이 느리다고 볼 수 있다. Dynamic Programming DP의 핵심은 메모이제이..

이분 그래프(Bipartite Graph)
CS/자료구조2023. 11. 30. 18:18이분 그래프(Bipartite Graph)

이분 그래프조건 : 두 개의 색으로만 구분, 인접한 정점이 같은 색을 가지면 안됨.Concept인접한 정점끼리 서로 다른 색으로 칠해서 모든 정점을 두 가지 색으로만 칠할 수 있는 그래프.위 사진과 같이 두 개의 그룹으로 나누어지며, 같은 그룹의 정점은 인접하지 않음.간선(E)이 아예 없고, 정점(V)만 있는 경우도 이분 그래프에 속함.Feature주어진 그래프가 이분 그래프인지 확인하기 위해서는 BFS, DFS 탐색을 활용.완전탐색의 일종으로 모든 정점을 방문하여 검사하기 때문에 O(V+E)의 시간복잡도를 가짐인접 정점 간의 싸이클(Cycle)이 발생할 경우 홀수 싸이클의 경우 이분 그래프를 절대 만족 못함. Implement너비 우선 탐색(BFS)를 활용한 탐색1. 인접리스트를 활용하여 양방향 그래프..

동적 계획법(Dynamic Programming)
CS/알고리즘2023. 8. 29. 11:29동적 계획법(Dynamic Programming)

1. 재귀 호출과 메모이제이션 문제 제시 : 토끼 수 구하기 문제의 내용만 달라졌을 뿐 사실 상 피보나치 f(n) = f(n-2) + f(n-1)이 성립 피보나치 수열 Fi : 피보나치 i번째 항을 구하는 함수 Fi : Fi-2 + Fi-1 → 재귀로 구현 fibo(n) IF n=2 AND memo[n] = 0 //0은 메모가 안된 상태를 의미 memo[n]

[알고리즘] 너비 우선 탐색(BFS)
CS/알고리즘2023. 8. 3. 23:40[알고리즘] 너비 우선 탐색(BFS)

1. BFS(너비 우선 탐색)그래프 탐색- 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것.- 알고리즘 문제를 풀다보면 2차원 배열이 주어지고 탐색을 하며 특정 값을 구하라는 문제가 많은데 DFS와 달리 시간복잡도가 까다롭게 설정되어있고 최단경로를 찾는 문제일 때 주로 사용.-동작과정큐 선언(2차원 배열이라면 Point 클래스를 활용) 및 시작 포인트 큐에 추가&&방문체크while(!Queue.isEmpty()) 큐가 없어질 때까지 반복Queue에서 poll하여 탐색 시작방향벡터를 이용해서 for문 4방탐색다음 행선지 NULL체크탈출 포인트 선언 (예를 들어 목적지 좌표에 도착했다면)장애물 및 탐색하면 안되는 곳이라면 continue로 탈출탐색할 수 있는 곳이라면 방문체크 및 큐..

Java#1 - 자바공부를 시작하며..
Language/Java2023. 4. 29. 00:11Java#1 - 자바공부를 시작하며..

프로그래밍 언어 중 하나인 자바에 대해 공부하기 위해 자바의 정석이라는 참고서를 구매하였습니다! 초반 부분은 여타 기본참고서와 비슷하게 변수부터 시작해서 배열까지 기본적인 개념들로 간단하게 자바에서 쓰이는 문법에 대해서만 포인트를 주며 가볍게 읽어봤습니다. 기존에 다른 프로그래밍언어를 접해보았다면 앞부분은 빠르게 넘기시는것도 괜찮을 것 같습니다. - JAVA? - 자바는 썬 마이크로시스템즈(Sun Microsystems, Incc. 이하 썬)에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어입니다. 자바의 중요한 특징은 운영체제에 독립적(자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행가능)이라는 것입니다. 또한 풍부한 클래스 라이브러리(Java API)를 통한 강력한 기능..

image