알고리즘(7)
-
[기본정렬] Quick Sort & Merge Sort 특징 및 차이점 정리, 자바로 구현해보기
분명히 예전에 자료구조 공부하며 직접 구현해보기도 했지만, 한참을 안보니 기억 속에서 희미해져 버렸다. 그래서 다시 책을 보며 java 로 구현해보고, 각 정렬의 동작 방식을 복기해보려고 한다. 더 나아가 두 정렬을 이론적으로 설명할 수 있게끔 제대로 학습해야겠다. Quick Sort주요 키워드 : 피벗 (Pivot) 시간 복잡도 : 평균 O(nlongn), 최악O(nc2)특징- 별도의 메모리를 사용하지 않는다.- 배열 내 교환이 이루어지기 때문에 불안정 정렬이다.- 이미 정렬된 배열이면 최악의 시간복잡도를 가진다.private static void swap(int[] a, int i, int j) { // 인덱스 i,j 의 위치를 교환하는 함수 int temp = a[i]; a..
2023.09.22 -
조합, 순열, 중복순열 이해하기
ex) [1,2,3] 중에서 2개 뽑기 - 조합 (중복 X, 순서 X) : [1,2] , [1,3] , [2,3] - 순열 (중복 X, 순서 O) : [1,2] , [1,3] , [2,1] , [2,3] , [3,1] , [3,2] - 중복순열 (중복 O, 순서 O) : [1,1] , [1,2] , [1,3] , [2,1] , [2,2] , [2,3] , [3,1] , [3,2] , [3,3] public class Main { // 방문 체크용 배열 static boolean[] visited; //N개중 static int N; //M개뽑기 static int M; static int[] arr; static int n = 0; //arr 인덱스 public static void dfs(int cou..
2023.03.23 -
백준 1744
안풀리면 다 찍어보는 습관,,,, 나쁘지 않은 거 같다. 결국 풀리면 재밌다. package 백준; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Baekjoon1744 { static int N; static int[] arr; static int result = Integer.MIN_VALUE; static int sum = 0; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String..
2023.02.04 -
프로그래머스 다음에 올 숫자
1/27 굉장히 쉬웠다... 그래도 그냥 기록용이니까 올린다. 난이도 0 은 정답률 낮은거 10문제정도만 풀고 넘어가야겠다. class Solution { public int solution(String[] babbling) { int answer = 0; String[] strArr = {"aya", "ye", "woo", "ma"}; for(int i=0; i
2023.01.27 -
프로그래머스 옹알이1
1/27 프로그래머스 처음 풀어보는데 Main 함수가 없어서 당황스럽다. 테스트하기 까다로운듯하다. 뭐 익숙해지면 괜찮아지겠지,,,,, 오랜만에 푼 문자열 문제 class Solution { public int solution(String[] babbling) { int answer = 0; String[] strArr = {"aya", "ye", "woo", "ma"}; for(int i=0; i
2023.01.27 -
백준 9934
처음 보는 유형이었다. 이분 트리 유형으로 라는 움직임을 알면 쉽다고 한다. 중위순회 움직임에 대해서 살짝 서칭한 후 구현하였다. 처음에 int[] 로 답을 출력하니 숫자가 들어갈때마다 초기화된다는 것을 깜빡했다. 그래서 String[ ] 로 바꿔서 문장형태로 출력했다. 또 하나의 방법을 알았다. public class Baekjoon9934 { static int k; static String[] result; static int[] arr; static void root(int s, int e, int floor){ if(floor==k) return; int m = (s+e)/2; result[floor] += Integer.toString(arr[m])+" "; // System.out.print..
2023.01.26