백준 (52) 썸네일형 리스트형 [백준] AC (5430번) 문제 흐름주어진 문제는 덱(Deque) 자료구조를 이용해 숫자 리스트에 대한 명령을 처리하는 것입니다.명령어에는 순서 반전('R')과 원소 삭제('D')가 포함되며, 이 명령을 순차적으로 수행한 결과를 배열 형태로 출력해야 합니다.덱이 비어 있는 상태에서 삭제 명령을 수행하면 "error"를 출력하고 해당 테스트 케이스를 종료합니다.중요한 부분은 덱의 순서 반전을 효율적으로 처리하면서 올바르게 결과를 출력하는 것입니다. 핵심 아이디어덱(Deque) 활용덱 자료구조는 앞뒤 양쪽에서 데이터를 삽입하고 삭제할 수 있어 양방향 연산이 빠르게 수행됩니다.순서 반전 플래그 사용매번 데이터를 뒤집는 대신, reverseFlag를 이용해 마지막 출력 시 역방향으로 처리합니다.이 접근법은 시간 복잡도를 줄여 효율성을 높.. [백준] 미세먼지 안녕! (17144번) 문제 이해 방 안에 먼지와 두 대의 공기청정기가 있습니다.먼지는 매 초마다 주변 네 방향으로 확산되며, 공기청정기는 일정한 방향으로 공기를 순환시켜 먼지를 제거합니다.이 프로그램은 먼지가 확산되고, 청정기가 작동하는 과정을 반복해 t초 후 방에 남은 먼지의 양을 계산합니다. 핵심 아이디어 먼지 확산:각 먼지 칸은 자신의 양의 1/5을 상하좌우로 확산시킵니다.확산된 먼지는 원래 있던 양에서 차감되며, 벽이나 공기청정기 칸으로는 확산되지 않습니다.공기청정기 작동:두 대의 공기청정기가 반대 방향으로 바람을 순환시켜 먼지를 제거합니다.윗쪽 청정기는 반시계 방향으로, 아랫쪽 청정기는 시계 방향으로 공기를 순환시킵니다.청정기를 지나간 칸의 먼지는 0으로 초기화됩니다. 알고리즘 흐름 초기화 단계: 방의 크기와 먼.. [백준] 바이러스 (2606번) 문제 이해이 문제는 DFS(깊이 우선 탐색)을 사용해 1번 노드와 연결된 모든 노드의 개수를 찾는 문제입니다.주어진 그래프는 무방향 그래프입니다. 즉, 노드 A와 B가 연결되어 있으면 A → B와 B → A로 이동할 수 있습니다. 핵심 아이디어DFS(깊이 우선 탐색):DFS는 재귀 호출을 사용해 그래프를 깊이 있게 탐색합니다.방문한 노드를 추적하며 이미 방문한 노드를 다시 탐색하지 않도록 해야 합니다.인접 리스트 사용:그래프를 인접 리스트로 구현합니다. 각 노드는 연결된 노드들의 리스트를 가집니다.방문 배열 활용:중복 방문을 방지하기 위해 visit[] 배열을 사용합니다.탐색 중 방문하지 않은 노드만 재귀적으로 탐색합니다. 알고리즘 흐름입력 받기:노드와 간선의 개수를 입력받습니다.각 간선의 정보를 입력받.. [백준] 미로 탐색 (2178번) 문제 이해이 문제는 미로에서 최단 경로를 찾는 문제입니다.시작점(0,0)에서 출발해 도착점(rows-1, cols-1)까지의 최단 거리를 구하는 것이 목표입니다.이동할 수 있는 칸은 '1'로 표시된 칸이며, '0'은 벽이므로 이동할 수 없습니다. 핵심 아이디어BFS(너비 우선 탐색):BFS는 모든 경로를 동일한 깊이로 탐색하기 때문에 최단 경로를 찾는 데 유리합니다.큐(Queue)를 사용해 탐색할 위치를 순서대로 저장하고 처리합니다.방문 체크:같은 칸을 중복 방문하지 않기 위해 방문 배열(visit[][])을 사용합니다.방문한 칸은 다시 탐색하지 않도록 true로 설정합니다.4방향 탐색:상하좌우 방향으로 이동하기 위해 델타 배열(dRow, dCol)을 사용합니다.새로운 좌표가 미로 범위 내에 있고 '1'.. [백준] 두 용액 (2470번) 문제 이해주어진 배열에서 두 수를 선택해 합이 0에 가장 가까운 쌍을 찾는 문제입니다.배열을 정렬한 후 투 포인터(Two-pointer) 알고리즘을 사용해 빠르게 해결합니다.목표는 합이 0에 가장 가까운 두 수를 찾아 그들의 값과 합의 절댓값을 출력하는 것입니다. 핵심 아이디어투 포인터 알고리즘:정렬된 배열에서 양 끝에서 출발하는 두 포인터(s, e)를 사용합니다.왼쪽 포인터(s)는 작은 수를, 오른쪽 포인터(e)는 큰 수를 가리킵니다.합이 0에 가까워질 수 있도록 절댓값이 큰 수 쪽의 포인터를 이동합니다.정렬 후 탐색:배열을 정렬하면 작은 수와 큰 수를 효율적으로 비교할 수 있습니다.정렬된 배열을 이용하면 한 번의 탐색으로 최적의 답을 찾을 수 있습니다.합의 절댓값 갱신:합이 더 작을 때마다 최소 차이.. [백준] N과 M (1) (15649번) 문제 이해이 코드는 백트래킹(Backtracking) 알고리즘을 사용해 순열을 생성합니다.주어진 n까지의 숫자 중에서 count개의 숫자를 선택해 가능한 모든 조합을 나열합니다.방문 배열을 사용해 중복된 숫자 사용을 방지합니다. 핵심 아이디어백트래킹(Backtracking):각 숫자를 순차적으로 선택하면서 가능한 모든 경우를 탐색합니다.재귀를 사용해 숫자를 추가하고, 조건에 따라 추가했던 숫자를 제거하며 탐색을 진행합니다.방문 여부 체크:숫자가 이미 순열에 포함되었는지 확인하기 위해 boolean[] visit 배열을 사용합니다.StringBuilder 사용:순열을 저장하고 출력하기 위해 StringBuilder를 사용합니다.매번 새로운 문자열을 생성하지 않고 효율적으로 문자열을 처리할 수 있습니다.백트.. [백준] DFS와 BFS (1260번) 문제 이해이 코드는 그래프 탐색 문제로, DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)를 인접 행렬로 구현합니다.그래프의 각 노드는 1부터 시작하며, 주어진 노드로부터 연결된 모든 노드를 순서대로 탐색합니다.입력으로 주어지는 간선 정보를 통해 무방향 그래프를 구성하고, 두 가지 탐색 방법으로 탐색 결과를 출력합니다.핵심 아이디어그래프를 인접 행렬로 표현:노드 간의 연결을 2차원 배열에 저장합니다.만약 두 노드가 연결되어 있다면 해당 위치에 1을 표시합니다.DFS(깊이 우선 탐색):한 노드에서 출발해 인접 노드를 재귀적으로 방문합니다.재귀 호출을 사용해 그래프의 모든 연결된 노드를 탐색합니다.BFS(너비 우선 탐색):큐(Queue)를 사용해 노드들을 순서대로 탐색합니다.한 노드에서 출발해 같은 레벨의.. [백준] 토너먼트 (1057번) 힌트문제 이해이 문제는 이진 트리 구조에서 두 개의 노드가 주어질 때, 이 두 노드가 부모 노드를 통해 만나는 경로를 찾는 문제입니다.주어진 노드가 서로 만나기 위해서는 서로의 부모 노드로 이동해야 하며, 이 과정에서 몇 번의 이동이 필요한지를 계산합니다.핵심 아이디어부모 노드 계산:이진 트리에서 부모 노드는 다음과 같이 계산할 수 있습니다:부모 노드 = (자식 노드 - 1) / 2 + 1이 공식을 사용하여 두 위치(pos1, pos2)의 부모 노드를 반복적으로 계산합니다.만나는 조건:두 위치가 동일할 때까지 부모 노드로 이동합니다.이동하는 횟수를 카운트하여 최종 결과를 출력합니다.알고리즘 흐름사용자로부터 노드 수와 두 위치를 입력받습니다.두 위치가 서로 다를 때까지 부모 노드로 이동합니다.이동한 라운드.. 이전 1 2 3 4 5 ··· 7 다음