본문 바로가기

728x90

전체 글

(405)
[백준] 미세먼지 안녕! (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'..
[수학 개념] 수열, 등차수열, 등비수열, 점화식, 유한/무한수열 개념 정리 수열이란?수열(Sequence)은 수의 나열을 의미하며, 어떤 규칙에 따라 수들이 차례로 배열된 것을 말합니다. 모든 수의 나열은 수열로 볼 수 있으며, 다음과 같은 예시들이 수열에 해당합니다:1, 2, 3, 4, 5, 6, ... (양의 정수를 순서대로 나열)1, 4, 9, 16, 25, ... (양의 정수를 제곱한 수열)3, 1, 4, 1, 5, 9, 2, ... (원주율 π의 각 자릿수를 나열)수열에서 앞에서 i번째에 있는 요소를 i번째 항이라고 부르며, 각 항의 위치에 따라 수열의 규칙이 정의될 수 있습니다. 등차수열과 등비수열수열에는 대표적으로 등차수열과 등비수열이 있습니다.등차수열 (Arithmetic Sequence)두 항의 차이가 일정한 수열입니다.예시: 2, 5, 8, 11, 14, ....
[백준] 두 용액 (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)를 사용해 노드들을 순서대로 탐색합니다.한 노드에서 출발해 같은 레벨의..
[네트워크] 동기, 비동기, Blooking, Non-Blooking 동기 (Synchronous)정의: 작업이 순차적으로 실행되며, 하나의 작업이 완료될 때까지 다음 작업이 기다립니다.예시:자바스크립트의 alert() 함수는 실행되는 동안 다른 작업을 막음서버에서 데이터를 받아올 때 응답이 오기 전까지 화면이 멈추는 경우장점직관적: 코드가 순차적으로 실행되기 때문에 이해하기 쉽고 디버깅이 용이예측 가능성: 실행 순서를 예측하기가 쉽고, 특정 시점에서 상태를 파악하기가 간단함단점속도 저하: 하나의 작업이 오래 걸리면 전체 프로세스가 멈추고 기다려야 함블로킹 문제: 느린 작업(예: 네트워크 요청)이 있는 경우 사용자 경험이 저하됨 비동기 (Asynchronous)정의: 작업을 요청한 후 완료를 기다리지 않고 다음 작업을 계속 수행하며, 나중에 결과가 준비되면 이를 처리합니다..

728x90