알고리즘
-
코드업 행복한 수(c++)알고리즘 2024. 2. 17. 13:43
https://codeup.kr/problem.php?id=4032&rid= 행복한 수 1. 하나의 정수 n이 입력된다. (1≤n≤1,000) codeup.kr #include #include #include #include using namespace std; #define MAXN ((int)1e3) int N; vector v; void InputData(){ cin >> N; } int sum(int n) { int tmp = 0; while (n > 0) { tmp += pow(n % 10, 2); n /= 10; } return tmp; } bool isHappy(int n) { v.clear(); v.push_back(n); while (true) { n = sum(n); if (n == 1..
-
2차원 배열 인덱스 조합 구하기알고리즘 2023. 5. 14. 17:41
2차원 배열의 위치들 중 k 개의 위치를 뽑고 싶을 때 사용하는 공식 예를들어 2*3 크기의 배열이 있다고 하면 0 1 2 3 4 5 처럼 각 위치에 인덱스를 부여하면 2차원 배열을 1차원 배열처럼 생각해서 조합을 구할 수 있다. import java.util.Scanner; public class TwoDim_comb { static int[][] result; static boolean[][] visited; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //배열의 행 int m = sc.nextInt(); //배열의 열 int k = sc.nextInt(); //k개의..
-
투포인터(백준 2003번), 슬라이딩 윈도우(자바)알고리즘 2022. 11. 11. 16:15
투포인터 : 부분 배열의 길이가 가변적일 때 배열의 합이 m인 부분 배열을 구한다고 하면 1. L ~ R 까지 부분배열의 합이 M보다 크면 L + 1 2. L ~ R 까지 부분배열의 합이 M보다 작으면 R + 1 3. L ~ R 까지 부분배열의 합이 M이면 L + 1, result 값 += 1 2003번: 수들의 합 2 (acmicpc.net) 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net import java.util.Scanner; public class Main..
-
문자열 KMP 알고리즘알고리즘 2022. 10. 18. 16:27
1. 단순 문자열 비교 알고리즘 parent a e a b a c pattern a b a c e와 b가 다르므로 pattern을 한 칸 이동시켜 다시 확인합니다. parent a e a b a c pattern a b a c e와 a가 다르므로 pattern을 다시 한칸 이동시킵니다. parent a e a b a c pattern a b a c 이런 식으로 한칸씩 이동시키며 문자열을 확인하면 O(N*M)의 시간 복잡도를 갖게 되어 비효율적입니다. 2. KMP 알고리즘 위의 알고리즘은 최악의 경우 오랜 시간이 걸릴 수 있으므로 모든 경우를 다 비교하지 않아도 부분 문자열을 찾을 수 있는 알고리즘인 KMP 알고리즘을 사용해야 합니다. KMP 알고리즘은 접두사와 접미사를 활용하여 문자열을 점프하여 효율적으..
-
순열, 중복순열, 조합, 중복 조합 알고리즘알고리즘 2022. 9. 8. 14:15
순열 : 순열 알고리즘은 전체 배열에서 순서에 상관 있게 r개를 뽑는 것이다. 즉, 1,2와 2,1을 다른 경우로 보는 것이다. 따라서 dfs를 수행할 때 arr을 항상 0 인덱스부터 돌면서 수행시켜줘야 한다. public class Main { public static void main(String[] args) { int[] arr = {1,2,5}; int r = 2; permutation(arr, r, 0, new boolean[arr.length], new int[r]); } static void permutation(int[] arr, int r, int depth, boolean[] visited, int[] result) { if (depth == r) { for (int n : resul..
-
인덱스, 리스트 안에 배열, 2차원 ArrayList, ArrayList 안에 ArrayList알고리즘 2022. 9. 4. 13:35
인덱스에서 0,1,2,3 후 다섯번째 인덱스를 다시 0으로 설정하고 싶다면 (i+1)%4와 같이 설정하면 된다. 리스트 안에 배열 바로넣기 List cloud = new ArrayList(); cloud.add(new int[]{1,2}); System.out.println(cloud.get(0)[1]); List[] lists = new ArrayList[5]; lists[2] = new ArrayList(); lists[2].add(4); ArrayList 2차원 ArrayList[][] map = new ArrayList[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { map[i][j] = new ArrayList(); } } ..