분류 전체보기 99

[알고리즘] 그래프 (다익스트라 알고리즘, 벨만-포드 알고리즘)

그래프노드와 간선을 이용한 비선형 데이터 구조`노드`: 데이터`간선`: 노드 간의 관계나 흐름`가중치`: 관계나 흐름에서 정도 표현 그래프 종류`방향 그래프`: 방향이 있는 간선을 포함한 그래프`무방향 그래프`: 방향이 없는 간선을 포함한 그래프`가중치 그래프`: 가중치가 있는 그래프`순환 그래프`: 특정 노드에서 시작해 간선을 따라 다시 돌아오는 경로가 있는 순환이 존재하는 그래프`비순환 그래프`: 순환이 존재하지 않는 그래프 그래프 구현(1) 인접 행렬 활용int graph[][] = new int[][]{{0, 400},{0, 0}};희소 그래프 (노드 수에 비해 간선 수가 매우 적은 그래프) 효현하는 경우 비효율노드들의 값의 차이가 매우 큰 그래프 표현하는 경우 비효율간선 정보 확인 시 시간 ..

Algorithm/Concept 2025.11.25

[DB/Oracle] 오라클 데이터베이스 + SQL Developer 설치 (MacBook Air M3)

01. 오라클 데이터베이스 설치하고 계정 설정하기(1) MacBook Air M3 도커에 Oracle 설치참고: https://velog.io/@daram_dev/Mac-오라클-21c-설치하기 Mac 오라클 21c 설치하기노트북을 바꾸면서 맥 환경도 경험해보고 싶어 맥북 에어 M3를 구매했습니다^^하지만 오라클에서 맥을 지원하지 않는다는 점...도커를 이용해서 오라클을 설치해야되는 데아뿔사! image를 pull 땡velog.io설치# 0. docker 설치# 1. colima 설치gaeun@iga-eun-ui-MacBookAir ~ % brew install colima# 2. colima 실행gaeun@iga-eun-ui-MacBookAir ~ % colima start --memory 4 --arc..

DB 2025.11.24

[알고리즘] 트리

01. 개념노드(node): 트리를 구성하는 요소루트 노드: 노드 중 가장 위에 있는 노드부모 노드: 상대적으로 위에 있는 노드자식 노드: 상대적으로 아래에 있는 노드형제 노드: 같은 부모 노드를 갖는 노드리프 노드: 자식이 없는 리프 노드간선(edge): 노드와 노드 사이를 이어주는 선차수(degree): 특정 노드에서 아래로 향하는 간선의 개수 표현배열이나 포인터로 구현 가능(1) 배열로 표현하기배열 = 선형 자료구조, 트리 = 계층 자료구조자식이 없거나 쓰지 않는 인덱스들은 모두 빈 값이므로 메모리가 낭비배열로 트리를 표현하기 위한 3가지 규칙루트 노드는 배열 인덱스 1번에 저장왼쪽 자식 노드의 배열 인덱스는 부모 노드의 배열 인덱스 * 2오른쪽 자식 노드의 배열 인덱스는 부모 노드의 배열 인덱스 ..

Algorithm/Concept 2025.11.24

[Algorithm/프로그래머스] Lv.3 양과 늑대.java (백트래킹)

https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 노드 정의각 노드의 자식을 관리하기 위해 `Node` 클래스를 정의하였다. `id`는 노드 번호이고, `value`는 양(0)과 늑대(1)를 나타내며, `childList`에 자식 노드를 담는다.static class Node { int id; int value; List childList; Node(int id, int value) { this.id = id; this.value = value; ..

[알고리즘] 해시 (Java)

01 . 개념해시는 해시 함수를 사용해서 변환한 값을 인덱스로 삼아 키와 값을 저장해서 빠른 데이터 탐색을 제공하는 자료 구조이다. 해시는 키를 활용해 데이터 탐색을 빠르게 한다.특징단방향 동작: 키 통해 값 찾기만 가능시간 복잡도 O(1): 해시함수 덕분에 탐색 과정 필요 X해시 함수를 활용해서 특정 값이 있는 위치를 바로 찾기 가능해시 테이블: 키와 대응한 값이 저장되어 있는 공간버킷: 해시 테이블의 각 데이터값을 인덱스로 활용하려면 변환과정 필요활용 분야비밀번호 관리데이터베이스 인덱싱블록체인 02. 해시 함수자바에서는 해시셋 혹은 해시맵이라는 표준 API를 제공해시 함수 구현시 고려사항해시 함수가 변환한 값은 인덱스로 활용해야 하므로 해시 테이블의 크기를 넘으면 안 된다.해시 함수가 변환한 값의..

Algorithm/Concept 2025.11.09

[Algorithm/BOJ] 1697 : 숨바꼭질.py

문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오.입력첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.출력수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.예제 입력 / 출력5 17 4힌트수빈이가 5 → 10 → 9 → 18 → 17 순..

[Algorithm/프로그래머스] Lv.2 타겟넘버.py

문제n개의 음이 아닌 정수들이 있습니다.이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다.예를 들어, [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 가지 방법이 있습니다.-1 + 1 + 1 + 1 + 1 = 3+1 - 1 + 1 + 1 + 1 = 3+1 + 1 - 1 + 1 + 1 = 3+1 + 1 + 1 - 1 + 1 = 3+1 + 1 + 1 + 1 - 1 = 3사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때,숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성하세요. 제한사항숫자의 개수: 2개 이상 20개 이하각 숫자: 1 이상 50 이하 자연수타겟 넘버..

[네트워크] 캐시와 조건부 요청 HTTP 헤더

캐시 기본 동작캐시가 없을 때[요청1]GET /star.jpg[응답1]HTTP/1.1 200 OKContent-Type: image/jpegContent-Length: 34012aklcmnaoi123rtnjcv79324jnbpqiejm23589cmnasoic9anlkjfoiqmmmsdjhfguyjhow93jmlkcv3HTTP 헤더 0.1MHTTP 바디 1.0M=> 1.1M 전송[요청2]GET /star.jpg[응답2]HTTP/1.1 200 OKContent-Type: image/jpegContent-Length: 34012aklcmnaoi123rtnjcv79324jnbpqiejm23589cmnasoic9anlkjfoiqmmmsdjhfguyjhow93jmlkcv3HTTP 헤더 0.1MHTTP 바디 1.0M..

CS/네트워크 2025.09.06

[네트워크] HTTP 일반 헤더 (+ 인증, 쿠키)

HTTP 헤더 기본 구조header-field = field-name ":" OWS field-value OWSfield-name: 헤더 이름 (대소문자 구분이 없다)ex. Host, Content-Typefield-value: 헤더 값 (문자열, 숫자, 기타 정보)OWS (Optional White Space): 공백 허용 (콜론 뒤에 스페이스 있어도 되고 없어도 된다.)[요청]GET /search?q=hello&hl=ko HTTP/1.1Host: www.google.com 👈 HTTP 헤더[응답]HTTP/1.1 200 OKContent-Type: text/html;charset=UTF-8 👈 HTTP 헤더Content-Length: 3423 👈 HTTP 헤더 ... HTTP 헤더 용도HTTP ..

CS/네트워크 2025.09.06

[네트워크] HTTP 상태 코드

HTTP 상태 코드클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다.1xx (Informational): 요청이 수신되어 처리 중2xx (Successful): 요청 정상 처리3xx (Redirection): 요청을 완료하려면 추가 행동이 필요4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함💡 모르는 상태 코드가 나온 경우 (클라이언트가 인식할 수 없는 상태코드를 서버가 반환한 경우) 클라이언트는 상위 상태코드로 해석해서 처리하므로 미래에 새로운 상태 코드가 추가되어도 클라이언트를 변경하지 않아도 된다. (ex. 299 → 2xx → Successful) ..

CS/네트워크 2025.09.05

[Algorithm/BOJ] 1463 : 1로 만들기.py

문제정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 풀이 #1각 숫자 인덱스에 연산 횟수를 저장하여 조회할 수 있도록 하였다. 그러나 이 풀이는 Bottom-up 방식으로, for문을 통해 1부터 n까지 모든 값을 계산하기 때문에 실제로 n의 최소 연산 횟수를 구하는 데 불필요한 값들까지 모두 연산하게 된다. 그리고 파이썬에서 list..

[Algorithm/BOJ] 16236 : 아기 상어.py

문제NxN 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1x1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다.아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다.아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 따라서, 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다.아기 상어가 어디로 이동할지 결정하는 방법은 아래와 같다.더 이상 먹을 수 있는 물고기가 공간에 없다면 아기 상어는 엄마 상어에게..

[네트워크] HTTP 설계

클라이언트에서 서버로 데이터를 전송하는 방식은 크게 쿼리 파라미터, 메시지 바디를 통한 데이터 전송 방식으로 나뉜다. 먼저, 쿼리 파라미터를 통한 데이터 전송은 주로 GET 방식을 사용하고 정렬 또는 필터(ex. 검색어)에 많이 사용된다. 메시지 바디를 통한 데이터 전송 방식은 POST, PUT, PATCH 방식을 사용하며, 회원가입, 상품 주문, 리소스 등록/변경 등에 사용된다.클라이언트에서 서버로 데이터를 전송하는 상황은 네 가지로 나눌 수 있다.1. 정적 데이터 조회 GET을 통하여 이미지, 정적 텍스트 문서를 조회할 때 사용되며, 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능하다.2. 동적 데이터 조회 GET 방식으로 쿼리 파라미터를 통해 데이터를 전달하고, 주로 검색하거나 게시..

CS/네트워크 2025.08.21

[JAVA] 기본형과 참조형

01. 변수의 데이터 타입기본형 (Primitive Type)변수에 사용할 값을 직접 넣을 수 있는 데이터 타입니다.ex. int, long, double, boolean기본형 변수에는 직접 사용할 수 있는 값이 들어있다.10, 20은 기본형으로, 값을 변수에 담고 해당 값을 바로 사용할 수 있다.cf. 참조형은 실제 사용하는 값을 변수에 담는 것이 아니다.값을 그대로 계산에 사용할 수 있다.참조형 (Reference Type)데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입이다.객체 또는 배열에 사용된다.객체: . (dot) 을 통해서 메모리 상에 생성된 객체를 찾아가야 사용할 수 있다.배열: [ ] 를 통해서 메모리 상에 생성된 배열을 찾아가야 사용할 수 있다.ex. Student stude..

Java 2025.08.19

[Algorithm/BOJ] 21608 : 상어 초등학교.py

문제상어 초등학교에는 교실이 하나 있고, 교실은 NxN 크기의 격자로 나타낼 수 있다.교실은 NxN 크기의 격자학생 수는 N^2명학생은 1번부터 N^2번까지 번호가 매겨져 있고, (r,c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1,1)이고 가장 오른쪽 아랫칸은 (N,N)이다선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다.이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다.한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1 을 만족하는 두 칸이 (r1, c1)과 (r2, c2)을 인접하다고 합니다.비어있는 칸 중에서 좋아하는 학생이 인접한 칸에 가장 많은 칸으로 자리를 정한다.1을 만족하는 칸..

[네트워크] HTTP 프로토콜

HTTPHyperText Transfer Protocol로, 하이퍼텍스트를 통해서 연결할 수 있는 HTML을 전송하는 프로토콜을 뜻한다. 현재는 모든 것을 HTTP 메시지에 담을 수 있다. HTML, TEXT, IMAGE, 음성, 영상, 파일, JSON, XML (API) 등 거의 모든 형태의 데이터를 전송 가능하다. 서버 간에 데이터를 주고 받을 때도 대부분 HTTP를 이용한다.HTTP 역사[1991년] HTTP/0.9 : GET 메서드만 지원, HTTP 헤더 X[1996년] HTTP/1.0 : 메서드, 헤더 추가[1997년] HTTP/1.1 : 가장 많이 사용, 우리에게 가장 중요한 버전[1997년] RFC2068[1999년] RFC2616[2014년] RFC7230 ~ 7235[2015년] HTTP..

CS/네트워크 2025.08.17

[네트워크] 인터넷 네트워크와 URI

인터넷에서 컴퓨터 둘은 어떻게 통신할까?클라이언트와 서버가 인터넷 망을 통해 Hello World 라는 메시지를 보내야 하는데 인터넷은 단순하지 않다. 수많은 중간 노드를 거쳐서 메시지가 전달되는 것이다. 그렇다면 어떤 규칙으로 전달되는 것일까? 이를 이해하기 위해서는 IP(인터넷 프로토콜)에 대해서 학습해야 한다.복잡한 망에서 메시지를 보내려면 최소한의 규칙이 있어야 한다.이는 IP 주소를 통해서 가능해진다.먼저 클라이언트와 서버는는 IP 주소를 부여 받아야 한다. (ex. 100.100.100.1)여기서 인터넷 프로토콜은 지정한 IP 주소에 메시지를 전달할 수 있도록 정해놓은 규칙이다.그래서 패킷이라는 통신 단위로 데이터를 전달한다.메시지를 그냥 보내는 것이 아니라 IP 패킷이라는 규칙에 맞춰 보낸다..

CS/네트워크 2025.08.16

[Algorithm/BOJ] 14503 : 로봇 청소기.py

문제 입력출력로봇 청소기가 작동을 시작한 후 작동을 멈출 때까지 청소하는 칸의 개수를 출력한다.내 풀이로봇 청소기는 N×M 크기의 맵에서 청소를 수행한다.각 칸은 벽(1) 또는 빈 칸(0)으로 구분된다.로봇의 행동 규칙:현재 위치를 청소한다.왼쪽부터 차례대로 4방향을 탐색하며, 청소하지 않은 칸이 있으면 이동한다.4방향 모두 청소가 완료되면 후진을 시도한다.후진이 불가능하면 작동을 멈춘다.DFS(깊이 우선 탐색)를 사용하면, 재귀적으로 청소와 이동을 구현할 수 있다.n, m = map(int, input().split()) # 세로, 가로r, c, d = map(int, input().split())graph = []result = 1for _ in range(n): graph.append(lis..

twMerge 커스텀 클래스 스타일 충돌 해결

약속 프로젝트에서는 Tailwind CSS를 활용해 공통 컴포넌트를 스타일링하며, twMerge, clsx, 그리고 cva를 조합하여 variant 기반 스타일링과 클래스 중복 제거를 효율적으로 관리하고 있다. 이 중 twMerge는 Tailwind 클래스 간 충돌을 감지하고, 우선순위에 따라 가장 마지막에 정의된 클래스를 병합해주는 유틸리티로, 다크모드 및 반응형 클래스 등 다양한 변형이 많은 Tailwind 환경에서 유용하게 활용된다. 해당 프로젝트에서는 디자인 시스템에 기반해 다음과 같이 text-head1, text-head2 등의 커스텀 타이포그래피 유틸 클래스를 정의하여 사용하고 있다. --text-head1--line-height: 52px; --text-head1--letter-spac..