728x90

자료구조 13

DFS & BFS 기본 간단 개념

자세한 내용 보러 가기 탐색이란? 많은 양의 데이터 중 원하는 데이터를 찾는 과정 EX) DFS, BFS 재귀함수란? 자기 자신을 다시 호출하는 함수. 파이썬의 경우 최대 재귀 깊이 제한이 있음. 종료 조건을 반드시 명시해야 함. 반복문을 이용하여 재귀함수와 동일한 기능을 구현할 수 있음. (재귀함수를 쓴다고 해서 반복문보다 항상 꼭 유리한 것은 아님. 유리할수도, 불리할수도 있음.) +) 컴퓨터가 함수를 연속적으로 호출하면 컴퓨터 메모리 내부의 스택 프레임에 쌓임. 그렇기 때문에 스택을 사용해야할 때 구현상 스택 라이브러리 대신 재귀함수 이용하는 경우가 많음. DFS : 깊이 우선 탐색 그래프에서 깊은 부분을 우선적으로 탐색. 스택 / 재귀를 이용함. 탐색 시작 노드를 스택에 삽입한 후 방문 처리함. ..

자료구조 2024.01.15

+) [JAVA] static변수, static메서드, 일반 변수/메서드 차이점 이해하기

일반 변수 & static 변수 편하게 생각하자면, static변수는 모오오오오든 객체에서 이 값을 공유하는 즉, 공용주방냉장고 라고 생각하면 된다. '셰어하우스에서 내 방 냉장고에서 꺼내먹은 라면 - 일반' '셰어하우스 공용주방 냉장고에서 꺼내먹은 라면 - static' 일반 method & static method 일반: 객체를 만들어줘야 호출이 가능하고, 일반변수와 static변수 둘 다 사용가능. static: 객체를 사용하지 않아도 되지만, static변수만 호출 가능. 객체2에서 '객체2.static변수A'의 값을 바꿔주면, 객체1에서의 '객체1.static변수A'의 값도 바뀐다. 객체2에서 '객체2.일반변수B'의 값을 바꿔줘도, 객체1에서의 '객체1.일반변수B'의 값은 그대로이다. 예시 pa..

자료구조 2023.05.06

+) JAVA Eclipse 자바 이클립스 디버깅하는 방법

학교에서 배우길, 디버깅 잘하는 사람이 진짜 코딩 잘하는 사람이랬다. 진짜 코딩 잘하는 사람이 되기 위해, 조약돌만한 징검다리라도 하나 놓기 위해, 이 게시물을 쓰며 공부해보겠다. 먼 저, 1. BreakPoint 브레이크 포인트 지정 내가 자세히 보고싶은 라인(부분)의 줄 넘버의 왼쪽 빈 공간을 더블클릭한다. 2. 벌레(Debug)를 클릭 / Run → Debug / F11 셋 중 아무거나 하고싶은 대로 디버깅모드를 실행한다. 3. 디 ~ 버 ~ 그 ~ ing ~ 입력받는 부분이 있다면 입력해줄거는 그대로 해주고, 입력받는 부분이 없고 그냥 실행하는 코드라면 지켜보면 된다. 이제 얘가 알아서 우리가 브레이크포인트를 걸어둔 부분에서 딱!!!! 멈출 것이다. 어랏❗❓ 근데 요상한 화살표들에 노란 불이 들어..

자료구조 2023.04.01

+) [JAVA] 기수정렬 알고리즘 정리 - radix sort

기수정렬(버킷정렬) 기수정렬( Radix Sort )이란, 숫자의 개별 자릿수를 기반으로 입력 데이터를 정렬하여 작동하는 정렬 알고리즘이다. 사용 중인 숫자 체계의 기본인 기수를 기준으로 숫자를 정렬하는데, 십진수에서의 기수는 10, 이진수에서의 기수는 2이다. 버킷정렬과 비슷하지만 차이점이 있다. 버킷정렬과 기수정렬 비교 정렬 기수정렬 버킷정렬 공통점 요소를 직접 비교하지 않는 정렬 알고리즘(non-comparative sorting algorithm) 요소 그룹화 개별 숫자 / 비트 기준. 낮은 자리부터 정렬 시작하여 높은자리까지 요소 정렬. 값의 범위를 동일한 크기의 간격(버킷)으로 나눠 해당 값을 버킷에 배포. 안정/불안정 안정. (동일한 요소의 상대적인 순서를 유지함) 불안정. 안정적이게 하기 ..

자료구조 2023.03.22

+) [JAVA] 합병(병합)정렬 알고리즘 정리 - merge sort

병합정렬(합병정렬) 병합정렬( Merge Sort )이란, 분할 정복 알고리즘(문제를 작은 2개로 분할하여 각각 해결한 뒤, 결과를 모아 원래 문제를 해결)중 하나이며, 입력 배열을 더 작은 하위 배열로 분해하고, 이러한 하위 배열들을 정렬한 다음 병합하여 정렬된 배열을 만드는 방법이다. 정렬 단계는 다음과 같다. 하위 배열이 하나의 요소로 이뤄질 때까지 배열을 반으로 재귀적으로 나눈다(divide). 하위 배열은 두 개의 가장 작은 요소를 비교하고 정렬(conquer)함으로써 쌍으로 병합(combine)된다. 모든 하위 배열들이 정렬된 단일 배열로 전부 병합될 때까지 반복된다. 장점 최악의 경우에도 시간 복잡도O(nlogn)가 버블/선택정렬O(n^2)보다 효율적이다. 안정적인 정렬 알고리즘이다. 여기서..

자료구조 2023.03.22

+) [JAVA] 퀵정렬 알고리즘 정리 - quick sort

퀵정렬 퀵정렬( Quick Sort )이란, 입력된 배열을 더 작은 하위 배열로 나누고 독립적으로 정렬한 다음 결합하여 정렬된 출력 배열을 형성하는 것이다. 기준점(피봇, pivot)을 기준으로 두 개의 비균등한 크기로 배열을 분할하고, 분할된 부분 리스트를 정렬한 뒤, 두 개의 정렬된 부분리스트를 합쳐서 정체가 정렬된 리스트가 되도록 한다. 정렬 단계를 나눠서 설명해보겠다. 1. 분할: 입력 배열을 2개의 부분배열로 분할하는데, 피봇을 중심으로 왼쪽에는 피봇보다 작은 요소들을, 오른쪽에는 피봇보다 큰 요소들을 배치. 2. 정복: 분할배열을 정렬할텐데, 분할배열의 크기가 충분히 작지 않다면 재귀의 방법으로 다시 분할,정복 과정을 적용. 3. 결합: 정렬된 분할 배열들을 하나의 배열로 합침. 재귀(순환호출..

자료구조 2023.03.22

+) [JAVA] 버블정렬 알고리즘 정리 - bubble sort

버블 정렬 버블정렬( Bubble Sort) 이란, 요소 목록을 반복적으로 살펴보고, 인접 요소를 비교하여 순서가 잘못된 경우 위치를 교체하는 정렬 알고리즘이다. 더 이상의 교체가 발생하지 않을때까지 이를 반복하며, 순서 교체가 완료된 상태는 요소 목록이 정렬된 상태를 나타낸다. 최악 시간 복잡도는 O(n^2)이며, 버블정렬은 큰 데이터 집합의 정렬보다는 작은 데이터 집합의 정렬에 유용하게 쓰인다.

자료구조 2023.03.22

+) [JAVA] 힙정렬 알고리즘 정리 - heap sort

힙정렬 힙정렬을 알아보기 전에 완전이진트리에 대해 알아보자. 우선, 이진트리란, 부모노드로부터 가지가 최대 두개 뻗어나오는, 즉, 자식이 최대 둘인 트리를 일컫는다. 완전이진트리는 다음과 같다. 힙이란, 완전 이진트리 기반의 트리형 자료구조로써 최댓값이나 최솟값을 쉽게 찾아내기 위해 사용된다. 힙에는 최대힙과 최소힙이 있는데, 최대 힙은 부모 노드의 키가 자식 노드의 키보다 같거나 큰 완전 이진 트리이며, 최소 힙은 자식 노드의 키가 부모 노드의 키보다 같거나 큰 완전 이진 트리이다. 힙정렬( Heap Sort )이란, 최대힙 트리나 최소힙 트리를 구성해 정렬을 하는 방법이다. 내림차순 정렬을 하기 위해서는 최대힙을, 오름차순 정렬을 하기 위해서는 최소힙을 구현해야 한다. 삽입과 삭제 n개의 정렬해야 할..

자료구조 2023.03.15

+) static, final, static final 구분

static 정적(필드, 메서드). 메서드 영역에 저장된다(메서드 영역=클래스 영역=스태틱 영역) 객체 생성하지 않아도 사용할 수 있음. 공용주방이라 생각하자. static(공용주방)에 있는 필드(라면)는 어느 클래스(객실)에서도 사용 가능. final 고정불변의 값. 객체 생성해야만 사용 가능. final + 필드 final + 메서드 final + 클래스 최초 default값. 한번 정의된 값은 변경 불가. 생성자를 통한 초기화 필!수! 오버라이딩(재정의) 금지 상속 불가("나만 쓸거야!") static final static이 붙지 않고 final만 붙은 필드는 생성자를 통해 무조건적인 초기화가 필요. 객체 생성시 초기화를 해줄 때마다 사용자 마음대로 다른 초기화를 해줄 수 있으므로 상당히 유동적이..

자료구조 2023.02.21
728x90