toUpperCase()와 toLowerCase()는 문자열의 모든 알파벳을 대문자 또는 소문자로 변환하는 메서드다.알파벳이 아닌 문자(숫자, 공백, 특수문자)는 그대로 유지된다.toUpperCase() — "Hello" 변환소문자와 대문자의 ASCII 차이는 항상 3
Integer.toBinaryString()은 10진수 정수를 2진수 문자열로 변환하는 Java 내장 메서드다.String.valueOf()나 Integer.toString()처럼 숫자를 문자열로 바꾸는데, 2진수 형태로 바꿔준다는 점이 다르다.10을 2진수로 변환하는
연결 리스트(Linked List)는 각 노드가 데이터와 다음 노드의 주소를 함께 저장하는 자료구조다.노드들이 포인터로 연결된 사슬 구조다.배열은 인덱스로 임의 접근이 가능하지만, 삽입/삭제 시 원소를 밀어야 한다.연결 리스트는 임의 접근은 느리지만, 특정 위치의 삽입
스택(Stack)은 나중에 넣은 데이터가 먼저 나오는(LIFO, Last In First Out) 자료구조다.마지막에 넣은 것이 가장 먼저 나온다.접시를 쌓는 것과 같다. 가장 위에 올린 접시를 가장 먼저 꺼낸다.괄호 유효성 검사 예시: ( ( ) ( ) )최종 스택이
큐(Queue)는 먼저 넣은 데이터가 먼저 나오는(FIFO, First In First Out) 자료구조다.먼저 줄 선 사람이 먼저 나간다.BFS 구현의 핵심 자료구조이며, 순서가 중요한 시뮬레이션 문제에서 자주 사용된다.프린터 큐 예시: 우선순위 1, 1, 9, 1,
덱(Deque, Double-Ended Queue)은 앞(front)과 뒤(rear) 양쪽 모두에서 삽입과 삭제가 가능한 자료구조다.스택과 큐를 합친 형태다.스택처럼도, 큐처럼도 쓸 수 있어 유연하다.5430번 AC 예시: 배열 \[1, 2, 3, 4, 5]에 명령 "
HashSet과 HashMap은 모두 해시 테이블(Hash Table) 기반의 자료구조다.키를 해시 함수로 변환해 저장 위치를 결정하기 때문에 탐색/삽입/삭제가 평균 O(1)이다.순서가 필요하면 LinkedHashSet / LinkedHashMap (삽입 순서),정렬이
힙(Heap)은 완전 이진 트리 기반의 자료구조로, 부모 노드가 항상 자식 노드보다 크거나 작은 조건을 만족한다.항상 최솟값(또는 최댓값)을 O(1)에 꺼낼 수 있다.우선순위 큐(Priority Queue)는 힙으로 구현된다.최소 힙에 원소 삽입/삭제삽입 — push(
Java에서 객체를 원하는 기준으로 정렬할 때 사용하는 인터페이스다.기본 Arrays.sort()는 오름차순만 지원하지만, Comparator를 사용하면 어떤 기준으로든 정렬할 수 있다.Comparator의 핵심은 compare(o1, o2)의 반환값이다.값의 범위가
N 이하의 모든 소수를 찾는 알고리즘이다. 핵심 아이디어는 단 하나다. 소수의 배수는 소수가 아니다. 2부터 시작해서 소수를 발견할 때마다 그 배수를 전부 제거한다. 남은 수가 모두 소수다.
브루트포스(Brute Force)는 가능한 모든 경우를 직접 시도해서 답을 찾는 방식이다.정답을 보장하는 가장 단순한 방법이지만, 경우의 수가 많아지면 시간이 오래 걸린다는 단점이 있다.알고리즘 문제에서 N이 작을 때 (대략 N ≤ 10,000,000) 브루트포스로 풀
순열과 조합은 여러 원소 중 일부를 선택하는 방식이다.순열은 n!/(n-r)!가지, 조합은 n!/(r!\*(n-r)!)가지다.1, 2, 3 중 2개를 선택하는 조합재귀로 하나씩 선택해나가면서 r개가 채워지면 결과에 추가한다.순서가 중요하면 순열, 아니면 조합이다.순열은
XOR(배타적 논리합, Exclusive OR)은 두 비트가 다를 때 1, 같을 때 0을 반환하는 비트 연산이다.Java에서 ^ 연산자로 사용한다.이 성질들이 코테에서 XOR을 활용하는 핵심이다.배열에서 하나만 홀수 번 등장하는 수를 O(N)에 찾을 수 있다.int 하
깊이 우선 탐색(Depth First Search). 한 방향으로 갈 수 있는 끝까지 파고든 뒤, 막히면 되돌아와서 다른 방향을 탐색하는 알고리즘이다.DFS를 구현하기 전에 그래프를 어떻게 표현할지 먼저 결정해야 한다.노드가 많고 간선이 적을 때 유리하다. 공간 복잡도
깊이 우선 탐색(Depth First Search). 한 방향으로 갈 수 있는 끝까지 파고든 뒤, 막히면 되돌아와서 다른 방향을 탐색하는 알고리즘이다.DFS + 가지치기. 조건에 맞지 않으면 즉시 되돌아와서 불필요한 탐색을 줄인다.핵심은 선택 → 탐색 → 되돌리기 3단
너비 우선 탐색(Breadth First Search). 시작 노드에서 가까운 노드부터 차례대로 탐색하는 알고리즘이다. 큐(Queue)를 사용하며, 가중치가 없는 그래프에서 최단 거리를 보장한다.visited를 offer할 때 체크: poll할 때 체크하면 같은 노드가
격자 탐색은 2차원 배열(격자)에서 가능한 모든 경우를 탐색하는 방식이다.완전탐색의 일종이지만, 상하좌우 이동이나 테두리 계산처럼 격자 구조에 특화된 패턴이 자주 등장한다.카펫 — brown=10, yellow=2 인 경우전체 칸 수 = 12. 12의 약수 쌍 (w,
TreeSet과 TreeMap은 레드-블랙 트리(Red-Black Tree) 기반의 자료구조로, BST의 균형을 항상 유지한다.HashSet/HashMap의 O(1) 대신 O(log N)이지만, 항상 정렬된 상태를 유지한다.HashSet/HashMap과 달리 순서가 보
이진 탐색 트리(BST)는 모든 노드가 다음 조건을 만족하는 이진 트리다.왼쪽 서브트리의 모든 값 < 현재 노드 < 오른쪽 서브트리의 모든 값이 구조 덕분에 탐색, 삽입, 삭제가 평균 O(log N) 에 가능하다.탐색 — 6을 찾는 경우삽입 — 5를 삽입하는
이분탐색은 정렬된 배열에서 탐색 범위를 절반씩 줄여나가며 원하는 값을 찾는 방식이다.정렬이 전제되어야 한다는 조건이 있지만, 탐색 속도가 O(log N)으로 훨씬 빠르다.1, 3, 5, 7, 9, 11, 13 에서 7을 찾는 경우1, 3, 5, 7, 9, 11, 13
파라메트릭 서치(Parametric Search)란, 최적화 문제를 결정 문제로 바꿔서 이분탐색으로 푸는 기법이다."정답이 될 수 있는가?"를 반복해서 물어, 최적값을 좁혀간다.직접 정답을 구하기 어려울 때, 특정 값 mid가 조건을 만족하는지만 판단한다.그 판단 결과
투 포인터는 두 개의 인덱스를 사용해서 탐색 범위를 좁혀나가는 방식이다.브루트포스로 O(N²)이 걸리는 문제를 O(N)으로 줄일 수 있다는 게 핵심이다.1, 2, 3, 4, 5 에서 합이 6인 쌍 찾기합이 target보다 크면 right를 줄이고, 작으면 left를 늘
슬라이딩 윈도우는 고정된 또는 가변적인 구간을 오른쪽으로 이동하면서 탐색하는 방식이다.브루트포스로 O(N²)이 걸리는 구간 합/최댓값 문제를 O(N)으로 줄일 수 있다.매번 처음부터 다시 더하는 게 아니라, 윈도우가 오른쪽으로 이동할 때 왼쪽 값을 빼고 오른쪽 값을 더
노드(정점, Vertex) 와 간선(Edge) 으로 이루어진 자료구조다.현실의 지하철 노선도, SNS 팔로우 관계, 도로망 등을 표현할 때 사용한다.한 방향으로 끝까지 파고든 뒤 되돌아오며 탐색한다.현재 노드에서 가까운 노드부터 탐색한다.코테에서 가장 자주 나오는 형태
다익스트라는 하나의 시작점에서 모든 노드까지의 최단거리를 구하는 알고리즘이다.음수 가중치가 없는 그래프에서만 사용할 수 있다.시작점 A에서 모든 노드까지의 최단거리매 단계에서 아직 방문하지 않은 노드 중 거리가 가장 짧은 노드를 선택해서 인접 노드의 거리를 갱신한다.매
MST(Minimum Spanning Tree, 최소신장트리)는 그래프의 모든 노드를 연결하는 간선들 중 가중치 합이 최소인 트리다.대표적인 알고리즘으로 크루스칼(Kruskal)과 프림(Prim)이 있다. 코테에서는 크루스칼을 더 많이 쓴다.크루스칼 알고리즘N-1개 간
그리디(Greedy)는 매 순간 가장 좋아 보이는 선택을 반복해서 최적해를 구하는 방식이다.DP처럼 이전 결과를 저장하거나, 브루트포스처럼 모든 경우를 탐색하지 않는다. 지금 이 순간 최선의 선택만 한다.단, 그리디가 항상 최적해를 보장하지는 않는다. 문제에서 탐욕적
위상정렬은 방향 그래프에서 노드들을 의존 관계 순서대로 나열하는 알고리즘이다.DAG(Directed Acyclic Graph, 방향 비순환 그래프) 에서만 사용할 수 있다.진입 차수(In-degree) 기반 BFS (칸 알고리즘)위상정렬 결과의 노드 수가 전체 노드 수
DP(Dynamic Programming)는 큰 문제를 작은 문제로 나누고, 작은 문제의 결과를 저장해서 재사용하는 방식이다.핵심은 두 가지다.중복 부분 문제 — 같은 계산이 반복된다최적 부분 구조 — 작은 문제의 최적해가 큰 문제의 최적해를 만든다같은 계산을 계속 반
2차원 DP는 상태가 두 개의 변수로 결정될 때 사용한다.1차원 DP가 dp\[i]로 상태를 표현했다면, 2차원 DP는 dp\[i]\[j]로 표현한다.상태가 2개라는 것만 다를 뿐, 점화식을 세우는 방식은 1차원 DP와 동일하다.격자 경로 — (0,0)에서 (3,3)까