본문 바로가기

전체 글

(433)
[백준] 두 용액 (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)정의: 작업을 요청한 후 완료를 기다리지 않고 다음 작업을 계속 수행하며, 나중에 결과가 준비되면 이를 처리합니다..
[JS] var, let, const 특징 JavaScript의 변수 선언: var, let, constJavaScript에서는 변수를 선언할 때 var, let, const를 사용할 수 있습니다. 이들은 각기 다른 스코프(범위)와 특성을 가지며 코드의 동작 방식에 영향을 미칩니다. 아래는 각각의 특징과 사용 방법을 정리한 내용입니다.  varvar는 ES6 이전의 기본 변수 선언 방식입니다. 하지만 스코프 문제와 호이스팅(hoisting) 특성으로 인해 주의해서 사용해야 합니다. var의 스코프 (범위)var는 함수 스코프를 가집니다. 즉, 함수 내에서 선언된 변수는 해당 함수 안에서만 유효합니다.함수 외부에서 선언된 var 변수는 전역 변수가 되어 프로그램 전체에서 접근할 수 있습니다.var hello = 'hello'; // 전역 변수fu..
[Python] Numpy 데이터 합치기, 쪼개기 넘파이 배열 합치기와 쪼개기NumPy는 배열 간 병합(합치기)과 분할(쪼개기)을 다양한 방식으로 수행할 수 있습니다. 일반 파이썬 리스트보다 효율적이고 유연하게 행(row)과 열(column)을 기준으로 배열을 합치거나 분할할 수 있습니다.  1. 배열 생성import numpy as npa = np.array([1, 2, 3, 4]).reshape(2, 2)print(a)# 결과:# [[1 2]# [3 4]] 배열 a는 2×2 형태로 변환되었습니다.2. 배열 합치기1. 수직으로 합치기 (열 방향, vstack)두 배열을 수직(세로)으로 쌓아 합칩니다.b = np.array([5, 6, 7, 8]).reshape(2, 2)print(b)# 결과:# [[5 6]# [7 8]]print(np.vstack..
[Python] Numpy 인덱싱, 슬라이싱 넘파이(NumPy) 인덱싱과 슬라이싱NumPy 인덱싱(indexing)과 슬라이싱(slicing)은 배열에서 특정 요소나 부분 배열에 접근하기 위해 사용됩니다. 기본적으로 파이썬의 리스트와 유사하지만, 다차원 배열에서 효율적으로 사용할 수 있는 기능들을 제공합니다. 1. 넘파이 배열 생성import numpy as npa = np.arange(10) ** 2print(a)# 출력: [ 0 1 4 9 16 25 36 49 64 81]np.arange(10)은 0부터 9까지 정수 배열을 생성합니다.각 요소를 제곱한 결과로 새로운 배열이 만들어집니다.2. 넘파이 인덱싱 (Indexing)인덱싱은 특정 위치의 요소를 선택할 때 사용됩니다.print(a[2]) # 4print(a[1]) # 1print(..
[Spring Boot] HTTP Cookie 사용하기 이번 글에서는 HTTP 쿠키를 사용하여 쿠키를 생성한 후 클라이언트의 쿠키에 저장하고, 요청이 들어왔을 때 쿠키의 유무를 파악 및 쿠키를 통해 정보를 전달하는 예제를 다룹니다.UserRepository@Componentpublic class UserRepository { // 메모리에 저장할 사용자 리스트 private final List userList = new ArrayList(); // ID로 사용자 찾기 public Optional findById(String id) { return userList.stream() .filter(it -> it.getId().equals(id)) .findFirst(); ..