시간복잡도 9

프로그래머스: 단어변환(JAVA)

✅ 문제 요약입력시작 단어 begin목표 단어 target단어 목록 words (변환 가능한 단어 리스트)조건한 번에 한 글자만 변경 가능변경된 단어는 모두 words 안에 있어야 함출력최소 변환 단계 수변환 불가능할 경우 0✅ 접근 방식 - BFS (너비 우선 탐색)단어들을 노드로 보고, 한 글자 차이 나는 단어끼리 간선을 연결한 그래프로 생각할 수 있습니다. 이 그래프에서 시작 단어부터 목표 단어까지의 최단 경로를 찾는 문제로 바뀌며, 이는 BFS로 효과적으로 해결할 수 있습니다.✅ Java 코드import java.util.*;class Solution { public int solution(String begin, String target, String[] words) { if ..

Algorithm 2025.05.08

자료구조 Tree(트리) 란?

트리(Tree)란?트리는 노드(Node) 들로 구성된 자료구조로, 다음 조건을 만족합니다.하나의 루트(Root) 노드에서 시작각 노드는 0개 이상의 자식 노드를 가짐사이클이 없음 (비순환 그래프)계층적 구조트리는 사실상 그래프의 일종이지만, 사이클이 없고 부모-자식 관계가 명확한 구조라는 점이 특징입니다.EX)디렉터리 구조데이터베이스 인덱스 (B-Tree 등)HTML DOM 트리컴파일러의 구문 트리 (Parse Tree)AI 탐색 알고리즘 (Game Tree 등)트리 용어용어설명노드(Node)데이터 단위루트(Root)최상위 노드리프(Leaf)자식이 없는 노드부모/자식 노드계층적 관계를 의미서브트리특정 노드를 루트로 하는 부분 트리깊이(Depth)루트에서 특정 노드까지의 거리높이(Height)리프에서 루트..

CS 2025.04.18

프로그래머스: 주식가격

[ 문제 접근 ]이 문제는 스택(Stack) 을 활용해 효율적으로 해결할 수 있습니다.앞에서부터 가격을 순회하면서 현재 가격보다 높은 가격이 나올 때까지 기다립니다.만약 지금 가격보다 낮은 가격이 나오면, 이전 인덱스부터 현재까지의 시간 차이를 계산합니다.끝까지 가격이 떨어지지 않은 경우, 전체 길이에서 현재 인덱스를 빼줍니다.[ 풀이 코드 ]import java.util.*;class Solution { public int[] solution(int[] prices) { int length = prices.length; int[] answer = new int[length]; Stack stack = new Stack(); for (..

Algorithm 2025.04.17

프로그래머스: 가장 큰 수 만들기

0 또는 양의 정수가 담긴 배열이 주어졌을 때, 이 숫자들을 조합하여 만들 수 있는 가장 큰 수를 반환하는 문제입니다. 예를 들어입력: [6, 10, 2] 출력: "6210"입력: [3, 30, 34, 5, 9] 출력: "9534330"단, 결과가 너무 클 수 있으므로 정수형이 아닌 문자열로 반환해야 합니다. 해결 과정숫자를 문자열로 변환: Arrays.stream(numbers).mapToObj(String::valueOf).toArray(String[]::new);커스텀 정렬 적용: 두 숫자를 번갈아 붙여보고 (a + b vs b + a) 더 큰 순서대로 정렬합니다.예외 처리: 배열의 첫 번째 요소가 "0"이면 "0"을 반환합니다.정렬된 숫자를 하나의 문자열로 합쳐 결과 반환. 코드 구현import ..

Algorithm 2025.03.27

백준 11724번: 연결 요소의 개수

문제입력: 정점(N), 간선(V), 그리고 각 간선 정보출력: 주어진 그래프에서 연결 요소의 개수그래프는 무방향 그래프이며, 1번 노드부터 N번 노드까지 존재한다고 가정한다.접근 방법인접 행렬을 이용해 그래프를 저장한다.**방문 여부를 체크하는 배열(visited)**을 사용한다.모든 노드(1~N)에 대해 BFS를 수행하면서 연결 요소의 개수를 센다.코드 구현import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.LinkedList;import java.util.Queue;import java.util.StringTokenizer;public class Main { ..

Algorithm 2025.03.24

백준 2667번: 단지번호붙이기

알고리즘맵 입력 받기: 2D 배열로 맵을 입력받습니다. 각 칸은 0 또는 1로 주어지며, 1은 집이 있는 곳을 의미합니다.BFS 탐색: 맵을 순차적으로 탐색하면서 집이 있는 칸(1)을 발견하면 BFS를 이용해 그 집과 연결된 모든 집을 탐색하고, 연결된 집의 개수를 셉니다.결과 출력: 각 구역에 포함된 집의 개수를 오름차순으로 출력합니다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Collections;import java.util.LinkedList;import java.util.Queue;public cla..

Algorithm 2025.03.20

삽입 정렬(Insertion Sort)

1. 삽입 정렬이란?삽입 정렬(Insertion Sort)은 정렬되지 않은 데이터를 하나씩 선택하여 이미 정렬된 부분에 적절한 위치에 삽입하는 방식으로 동작하는 정렬 알고리즘입니다.이 정렬 방식은 적은 데이터에 대해 빠르게 정렬할 수 있고, 거의 정렬된 데이터에 대해 매우 효율적입니다.2. 삽입 정렬 동작 원리삽입 정렬은 다음과 같은 방식으로 동작합니다:배열의 두 번째 요소부터 시작하여 선택한 요소를 앞쪽의 정렬된 배열과 비교합니다.비교한 후, 적절한 위치에 삽입합니다.이 과정을 배열의 끝까지 반복합니다.예제: 삽입 정렬 과정 (오름차순 정렬)다음과 같은 배열이 있다고 가정하겠습니다.[5, 3, 8, 4, 2]삽입 정렬이 진행되는 과정은 다음과 같습니다.첫 번째 요소(5)는 이미 정렬된 상태로 간주두 번..

Algorithm 2025.02.19

시간복잡도와 공간복잡도

1. 시간복잡도(Time Complexity)시간복잡도란 알고리즘이 실행되는 데 걸리는 시간을 입력 크기(input size, n)에 따라 분석하는 개념이다. 즉, 입력이 증가할수록 실행 시간이 어떻게 변하는지를 나타낸다. 일반적으로 시간복잡도는 빅오 표기법(Big-O Notation) 을 사용하여 표현한다. 1.1 시간복잡도의 빅오 표기법(Big-O Notation)빅오 표기법은 알고리즘의 실행 시간이 입력 크기에 따라 증가하는 속도를 나타내는 표기법이다. 주요 시간복잡도 유형은 다음과 같다.O(1) - 상수 시간(Constant Time): 입력 크기에 관계없이 항상 일정한 시간이 걸리는 알고리즘예: 배열의 특정 인덱스에 접근 (arr[i])O(log n) - 로그 시간(Logarithmic Time..

Algorithm 2025.02.19