Problem Solving

[알고리즘] 36. 투 포인터

[알고리즘] 36. 투 포인터지난 글에서는 Comparator를 이용해 원하는 기준으로 정렬하는 방법을 정리했습니다. 이번 글에서는 정렬된 배열이나 연속 구간 문제에서 자주 사용하는 투 포인터(Two Pointers)에 대해 알아보겠습니다.투 포인터는 이름 그대로 두 개의 포인터를 사용해서 문제를 해결하는 방법입니다. 배열이나 리스트에서 두 위치를 가리키는 변수를 두고, 조건에 따라 한쪽 또는 양쪽 포인터를 움직입니다.투 포인터는 두 개의 위치 변수를 움직이며 조건을 만족하는 값을 찾는 알고리즘 기법입니다.1. 투 포인터란?투 포인터는 배열에서 두 개의 인덱스를 사용해 탐색 범위를 조절하는 방식입니다. 보통 left와 right, 또는 start와 end라는 이름을 사용합니다.배열: [1, 2, 3, 4..

[알고리즘] 35. Comparator 완전 정복

[알고리즘] 35. Comparator 완전 정복지난 글에서는 Java 정렬 사용법에 대해 정리했습니다. 이번 글에서는 Java 정렬에서 가장 많이 헷갈리는 부분인 Comparator에 대해 자세히 알아보겠습니다.Comparator는 정렬 기준을 직접 만들 때 사용하는 도구입니다. 숫자를 오름차순이나 내림차순으로 정렬하는 것뿐 아니라, 문자열 길이순, 여러 조건 정렬, 객체 정렬까지 처리할 수 있습니다.Comparator는 두 값을 비교해서 어떤 값이 앞에 올지 결정하는 정렬 기준입니다.1. Comparator란?Comparator는 Java에서 정렬 기준을 직접 정의할 때 사용하는 인터페이스입니다. 기본 정렬이 아니라 원하는 기준으로 정렬하고 싶을 때 사용합니다.예를 들어 숫자는 기본적으로 오름차순 정..

[알고리즘] 34. Java 정렬 사용법

[알고리즘] 34. Java 정렬 사용법지난 글에서는 정렬 알고리즘의 기본 개념에 대해 정리했습니다. 이번 글에서는 알고리즘 문제에서 실제로 가장 자주 사용하는 Java 정렬 사용법을 알아보겠습니다.알고리즘 문제에서는 선택 정렬, 버블 정렬, 삽입 정렬을 직접 구현하기보다 Java에서 제공하는 정렬 기능을 사용하는 경우가 훨씬 많습니다.Java 정렬의 핵심은 배열은 Arrays.sort(), 리스트는 Collections.sort() 또는 sort()를 사용한다는 것입니다.1. Java에서 정렬을 왜 사용할까요?정렬은 알고리즘 문제에서 정말 자주 사용됩니다. 데이터를 특정 기준으로 정리해두면 이후 처리가 쉬워지기 때문입니다.최솟값과 최댓값을 쉽게 찾기중복 값 확인하기이분 탐색 사용하기투 포인터 사용하기문..

[알고리즘] 33. 정렬 알고리즘 개념

[알고리즘] 33. 정렬 알고리즘 개념지난 글에서는 최단 거리 기초에 대해 정리했습니다. 이번 글부터는 정렬과 구간 처리 영역으로 들어갑니다. 그 첫 번째 주제는 정렬 알고리즘 개념입니다.정렬은 데이터를 일정한 기준에 따라 순서대로 나열하는 작업입니다. 알고리즘 문제에서는 숫자를 작은 순서대로 정렬하거나, 문자열을 사전순으로 정렬하거나, 여러 조건에 맞게 데이터를 정리할 때 자주 사용됩니다.정렬은 데이터를 원하는 기준에 맞게 순서대로 배치하는 알고리즘입니다.1. 정렬이란?정렬은 여러 데이터를 특정 기준에 따라 순서대로 배치하는 것입니다. 가장 기본적인 예시는 숫자 정렬입니다.정렬 전: 5 2 8 1 3정렬 후: 1 2 3 5 8위 예시는 숫자를 작은 값에서 큰 값 순서로 정렬한 것입니다. 이처럼 정렬은 ..

[알고리즘] 32. 최단 거리 기초

[알고리즘] 32. 최단 거리 기초지난 글에서는 격자 탐색에 대해 정리했습니다. 이번 글에서는 그래프와 격자 문제에서 자주 등장하는 최단 거리에 대해 알아보겠습니다.최단 거리는 말 그대로 어떤 시작점에서 목표 지점까지 가는 데 필요한 가장 짧은 거리입니다. 알고리즘 문제에서는 최소 이동 횟수, 최소 비용, 가장 빠른 경로 같은 형태로 자주 등장합니다.최단 거리는 시작점에서 목표 지점까지 도달하는 여러 경로 중 가장 짧은 경로의 길이를 의미합니다.1. 최단 거리란?최단 거리는 여러 경로 중에서 가장 짧은 경로를 찾는 개념입니다. 예를 들어 1번 정점에서 4번 정점으로 이동한다고 생각해보겠습니다.1 --- 2 --- 4 \ / --- 3 ---1번에서 4번으로 가는 경로는 여러 가지가 있을 ..

[알고리즘] 31. 격자 탐색

[알고리즘] 31. 격자 탐색지난 글에서는 방문 배열에 대해 정리했습니다. 이번 글에서는 2차원 배열에서 상하좌우로 이동하며 탐색하는 격자 탐색에 대해 알아보겠습니다.격자 탐색은 알고리즘 문제에서 매우 자주 등장합니다. 미로 찾기, 섬의 개수, 영역 구하기, 바이러스 전파, 토마토 익히기 같은 문제들이 대부분 격자 탐색과 연결됩니다.격자 탐색은 2차원 배열에서 현재 위치를 기준으로 상하좌우 또는 대각선 방향을 확인하며 이동하는 탐색 방식입니다.1. 격자 탐색이란?격자는 행과 열로 이루어진 2차원 구조입니다. 알고리즘 문제에서는 보통 2차원 배열로 표현합니다.1 1 00 1 01 1 1위와 같은 구조에서 각 칸은 하나의 위치를 의미합니다. 예를 들어 1은 이동 가능한 칸, 0은 이동할 수 없는 칸이라고 생..

[알고리즘] 30. 방문 배열

[알고리즘] 30. 방문 배열지난 글에서는 BFS 너비 우선 탐색에 대해 정리했습니다. 이번 글에서는 DFS와 BFS에서 빠지지 않고 등장하는 방문 배열에 대해 알아보겠습니다.방문 배열은 어떤 정점이나 칸을 이미 확인했는지 기록하는 배열입니다. 그래프나 2차원 배열을 탐색할 때 방문 배열을 제대로 사용하지 않으면 같은 위치를 반복해서 방문하거나, 무한 반복처럼 동작할 수 있습니다.방문 배열은 이미 방문한 정점이나 위치를 다시 방문하지 않기 위해 사용하는 체크 배열입니다.1. 방문 배열이란?방문 배열은 이름 그대로 방문 여부를 저장하는 배열입니다. 어떤 정점이나 위치를 한 번 방문했다면 true로 표시하고, 아직 방문하지 않았다면 false 상태로 둡니다.visited[1] = true → 1번 정점 방..

[알고리즘] 29. BFS 너비 우선 탐색

[알고리즘] 29. BFS 너비 우선 탐색지난 글에서는 DFS 깊이 우선 탐색에 대해 정리했습니다. 이번 글에서는 그래프 탐색에서 DFS와 함께 가장 많이 등장하는 BFS에 대해 알아보겠습니다.BFS는 Breadth First Search의 줄임말로, 우리말로는 너비 우선 탐색이라고 합니다. DFS가 한 방향으로 깊게 들어가는 방식이라면, BFS는 시작점에서 가까운 곳부터 차례대로 탐색하는 방식입니다.BFS는 시작점에서 가까운 정점부터 차례대로 방문하는 탐색 알고리즘입니다.1. BFS란?BFS는 그래프나 트리에서 시작 정점과 가까운 정점부터 먼저 방문하는 탐색 방법입니다. 한 정점에서 바로 갈 수 있는 곳을 먼저 모두 확인하고, 그다음 거리의 정점을 확인합니다. 1 / \ ..