목록IT/JAVA (16)
개발 공부~
메타문자 정규표현식 또는 정규식을 제어할 수 있는 문자 . (점)줄 바꿈 문자를 제외한 모든 단일 문자와 일치예: a.b는 a 다음에 어떤 문자든 하나 있고 그 다음에 b가 오는 패턴과 일치 (aab, acb 등).^ (캐럿)문자열의 시작예: ^a는 문자열의 시작이 a인 경우와 일치.$ (달러)문자열의 끝예: a$는 문자열의 끝이 a인 경우와 일치.* (별표)앞의 문자가 0회 이상 반복됨 -> 바로 앞의 문자가 없거나 하나 이상예: ab*는 a 다음에 b가 0개 이상 오는 패턴과 일치 (a, ab, abb, abbb 등)+ (플러스)앞의 문자가 1회 이상 반복됨 -> 바로 앞의 문자가 하나 이상예: ab+는 a 다음에 b가 1개 이상 오는 패턴과 일치 (ab, abb, abbb 등)? (물음표)앞..
현재 상태에서 보는 선택지 중 최선의 선택을 하는 알고리즘동적 계획법보다 구현하기 쉽고 시간 복잡도가 우수함but, 항상 최적의 해를 보장하지 못함(단점)=> 사용하기 전 논리 유무를 살펴야 수행과정해 선택: 현재 상태에서 가장 최선이라고 생각되는 해를 선택적절성 검사: 현재 선택한 해가 전체 문제의 제약 조건에 벗어나지 않는지 검사해 검사: 현재까지 선택한 해 집합이 전체 문제를 해결할 수 있는지 검사 -> 못하면 과정 1로 돌아가기
타깃 데이터 탐색 :데이터가 정렬돼 있는 상태에서 원하는 값을 찾아내는 알고리즘특징: 대상 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 축소하며 찾는다시간 복잡도: O(logN)핵심 이론 (when. 오름차순으로 정렬된 데이터)내림차순이면 조건 반대로~ 현재 데이터셋의 중앙값을 선택중앙값 > 타깃 데이터 : 중앙값 기준으로 왼쪽 데이터셋을 선택중앙값 과정 1~3을 반복 -> 중앙값 == 타깃 데이터 일때 종료=> N개의 데이터에서 log(N)번의 연산으로 원하는 데이터의 위치를 찾을 수 있음ex) 16개의 데이터 -> 최대 4번의 연산 필요 주의할 점: 이미 오름차순 혹은 내림차순으로 정렬되어야

DFS (깊이 우선 탐색)그래프 완전 탐색 기법 중 하나. 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하고 이의 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행-> 한 번 방문한 노드를 다시 방문하면 안됨 -> 노드 방문 여부를 체크할 배열이 필특징재귀함수로 구현 -> stack overflow에 유의!후입선출 -> 스택 자료구조 이용 => 단절점 찾기, 단절선 찾기, 사이클 찾기, 위상 정렬 문제에 이용됨=> 시간복잡도 = O(V+E) -v: 노드 수, e: 엣지 개수 BFS (너비 우선 탐색)그래프 완전 탐색 기법 중 하나. 그래프의 시작 노드에서 출발하여 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘-> 목표 노드에 도착하는 경로가 여러..

버블 정렬두 인접한 데이터의 크기를 비교해 정렬(swap 연산) -> O(n^2)의 시간 복잡도맨 앞 데이터를 기준으로 잡고 하나씩 이동하며 swap조건에 부합하면 연산 수행하고 끝까지 이동이렇게 정렬된 영역은 다음 루프 때 제외한다.즉, 특정 루프 전체에서 swap이 한 번도 없었다면 모두 정렬되었다는 의미 선택 정렬대상 데이터에서 최대나 최소 데이터를 데이터가 나열된 순으로 찾아가며 선택하는 방법, 원리만 알아가자~원리1. 최솟값 또는 최댓값을 찾는다.2. 남은 정렬 부분의 가장 앞에 있는 데이터와 swap한다.3. 가장 앞에 있는 데이터의 위치를 변경(index++;)하여 남은 정렬 부분의 범위 축소한다4. 전체 데이터 크기만큼 index가 커질 때까지 즉, 남은 정렬 부분이 없을 때까지 반복..
스택: 삽입, 삭제 연산이 후입선출로 이뤄지는 자료구조 -> 삽입/삭제는 한 쪽에서만 일어남위치: top(삽입/삭제 일어나는 위치)push: top위치에 새로운 데이터 삽입하는 연산pop: top위치에 현재 있는 데이터 삭제하고 확인하는 연산peek: top 위치에 현재 있는 데이터를 단순 확인하는 연산=> DFS, 백트래킹에 효과적 (재귀함수 알고리즘 원리와 비슷) 큐: 삽입, 삭제 연산이 선입선출로 이뤄지는 자료구조 -> 먼저 들어온 데이터가 먼저 나감 => 삽입/삭제 양방향rear: 큐에서 가장 끝 데이터를 가리킴front: 큐에서 가장 앞 데이터를 가리킴add: rear부분에 새로운 데이터를 삽입하는 연산poll: front부분에 있는 데이터 삭제하고 확인하는 연산peek: 큐의 front에 있는..
length배열의 길이를 구할때!배열은 객체이지만 메서드 호출 없이 가능 -> 속성으로 접근int[] numbers = {1, 2, 3, 4, 5};System.out.println("Array length: " + numbers.length); // 출력: 5String answer = ""; for(int i =0;ilength()문자열의 길이를 구할때!문자열은 객체이므로 메서드 호출로~!String text = "Hello, World!";System.out.println("String length: " + text.length()); // 출력: 13size()컬렉션의 크기를 얻을때!-> ArrayList, HashSet, HashMap컬렉션은 객체이므로 메서드 호출로~!
배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조인덱스를 사용하여 값에 바로 접근배열의 크기는 선언할 때 지정새로운 값을 삽입 or 특정 인덱스의 값 삭제 어려움-> 데이터를 저장할 수 있는 모든 공간은 인덱스와 일대일 대응 (=> 임의 접근)순서(index)를 가진 데이터의 집합생성과 동시에 크기가 고정됨전체 원소가 메모리상에 일렬로 저장됨 배열 기능별 시간복잡도get(int idx) : idx 번째 원소 반환 -> O(1)change(int idx, int val) : idx번째 원소를 val로 변경 -> O(1)append(int val) : 가장 뒤에 원소 삽입 -> O(1)insert(int idx, int val) : 현재 idx번째 원소의 앞에 원소 삽입 -> O(N)erase(i..