투포인터 알고리즘 (Two Pointer Algorithm)
·
Coding/알고리즘 정리
투포인터 알고리즘 이란?배열이나 리스트에서 두 개의 포인터 인덱스를 이동시키면서 문제를 해결하는 방식보통 정렬된 배열에서 구간 합, 조건 만족 여부, 두 원소의 조합 등 을 사용할 때 사용시간 복잡도O(N)기본 원리 예시int[] arr = {1, 2, 4, 7, 11, 15};int target = 15;int left = 0, right = arr.length - 1;while (left 마무리 요약투 포인터 알고리즘은 배열 문제를 풀 때 주로 사용브루트포스 방식을 O(N) ~ O(N log N) 으로 줄여주기 때문에 효율적
플로이드 워셜 알고리즘
·
Coding/알고리즘 정리
플로이드 워셜 알고리즘이란?가중치가 있는 방향/무방향 그래프에서 모든 정점 쌍 사이의 최단 거리를 한번에 구하는 DP 기반 알고리즘음수 가중치 간선은 허용하지만, 음수 사이클이 있으면 최단거리가 정의되지 않는다.시간 공간 복잡도시간 : O(N^3)공간 : O(N^2)핵심 아이디어dist[i][j]=min(dist[i][j], dist[i][k]+dist[k][j]) 해석 : i → j 까지 가는 가장 짧은 값을 출력i → k → j 가 가능하다면 해당 값으로 값을 대체❗반복문의 순서가 중요하다 k → i → j중간 정점으로 1..k만 허용 하는 부분 문제를 누적해야 하므로 이 순서가 무조건 보장 되어야한다.사용 판단 기준N이 중간 규모 대략 N≤500 이고 모든 쌍의 거리 도달성을 한번에 알고 싶을 때,..
최장 증가 부분 수열 (LIS)
·
Coding/알고리즘 정리
LIS (Longest Increasing Subsequence)최장 증가 부분 수열→ 어떤 수열이 왼쪽에서 오른쪽으로 나열되어 있으면 그 배열 순서를 유지하면서 크기가 점진적으로 커지는 가장 긴 부분 수열을 추출 하는 문제1. LIS란?주어진 순열에서 오름차순 을 유지하는 부분 수열 중 가장 긴 수열의 길이를 구하는 알고리즘ex) 수열 = [10, 20, 10 ,30 ,20 ,50] 이 주어졌을때가능한 증가 부분 수열은[10, 20, 30, 50] → 길이가 4[10, 20, 50] → 길이가 3[10, 30, 50] → 길이가 3등등이 생성된다. 이럴 경우 정답이 42. 대표적인 풀이방법풀이방법1 : DP풀이방법2 : 이진 검색 활용DP O(N^2) 풀이 - 기초적인 방법아이디어 : dp[i] = i..
[SWEA][D2] 1940. 가랏! RC카 Java
·
Coding/알고리즘 문제풀이
import java.util.Scanner; public class RcCar { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T; T = sc.nextInt(); for (int test_case = 1; test_case 0) { // 가속이나 감속일 경우 int value = sc.nextInt(); if( choice == 1){ // 가속일경..
[SWEA][D2] 1945. 간단한 소인수분해 Java
·
Coding/알고리즘 문제풀이
import java.util.Scanner; public class devide { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T; T = sc.nextInt(); int[] devideNumArr = {2, 3, 5 , 7 ,11}; int[] arr; for (int test_case = 1; test_case
[SWEA][D2] 1288. 새로운 불면증 치료 Java
·
Coding/알고리즘 문제풀이
import java.util.Arrays; import java.util.Scanner; public class sleep { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T; T = sc.nextInt(); boolean[] result; for (int test_case = 1; test_case