Stay Hungry Stay Foolish
728x90

전체 글 498

[Programmers/알고리즘 고득점 KIT] 프로세스

[Programmers] 프로세스Level 2 | #Queue #자료구조문제 바로가기 🔗1. 문제 요약 및 로직특정 프로세스가 실행될 차례일 때, 큐에 우선순위가 더 높은 프로세스가 있다면 현재 프로세스를 다시 큐의 끝으로 보내는 문제이다.Queue 활용: deque를 사용하여 프로세스를 관리하며, 인덱스와 우선순위를 튜플로 저장한다.우선순위 비교: 현재 꺼낸 프로세스보다 높은 우선순위가 하나라도 있는지 매번 확인한다.실행 순서: 더 높은 우선순위가 없다면 프로세스를 실행시키고 카운트를 올린다.2. 리팩토링 코드 (Python)from collections import dequedef solution(priorities, location): # 1. 인덱스와 우선순위를 큐에 담기 queue ..

[BOJ] 2178. 미로 탐색 (Python/BFS/Silver 1)

[Baekjoon] 2178. 미로 탐색Silver 1 | #BFS #최단경로문제 바로가기 🔗1. 문제 요약 및 풀이 방식(1, 1)에서 출발하여 (N, M) 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 문제이다.최단 거리 = BFS: 모든 간선의 가중치가 동일할 때 최단 경로를 보장하는 BFS를 사용한다.거리 업데이트: 다음 칸으로 이동할 때 현재 칸의 값 + 1을 저장하여 방문 여부와 거리를 동시에 관리한다.2. 전체 코드 (Python)import sysfrom collections import dequeinput = sys.stdin.readline# 데이터 입력 시 미리 int형 리스트로 변환 (최적화)N, M = map(int, input().split())graph = [list(..

[Database] 트랜잭션 격리 수준 (Isolation Level)

💾 데이터베이스 트랜잭션 격리 수준 (Isolation Level)목차1. 트랜잭션 격리 시 발생하는 이상 현상(Anomalies)2. SQL 표준 격리 수준 4단계3. 심화 데이터 이상 현상4. 스냅샷 격리(Snapshot Isolation)5. 주요 RDBMS별 특징1. 트랜잭션 격리 시 발생하는 이상 현상트랜잭션이 동시에 실행될 때 격리 처리가 완벽하지 않으면 데이터 불일치가 발생합니다.Dirty Read: 커밋되지 않은 트랜잭션의 데이터를 읽는 현상 (롤백 시 무결성 파괴).Non-repeatable Read: 한 트랜잭션 내에서 같은 데이터 조회 시, 사이 값이 수정되어 결과가 다른 현상.Phantom Read: 범위 조회 시, 사이 데이터가 삽입/삭제되어 결과 건수가 달라지는 현상.2. SQ..

[BOJ] 11724. 연결 요소의 개수 (Python/DFS/Silver 2)

[Baekjoon] 11724. 연결 요소의 개수Silver 2 | #DFS #BFS #그래프이론문제 바로가기 🔗1. 문제 요약 및 접근 방식방향 없는 그래프가 주어졌을 때, 연결 요소(Connected Component)의 개수를 구하는 문제이다. 즉, 그래프가 몇 개의 독립된 덩어리로 나뉘어 있는지 찾아야 한다.정점 중심 탐색: 간선이 없는 고립된 정점도 하나의 연결 요소로 취급해야 하므로, 모든 정점(1~N)을 순회하며 방문 체크를 해야 한다.인접 리스트 활용: 특정 정점과 연결된 노드들만 효율적으로 탐색하기 위해 인접 행렬보다 인접 리스트를 사용한다.무방향성: 양방향 연결을 위해 graph[u].append(v)와 graph[v].append(u)를 모두 수행한다.2. 전체 코드 (Python ..

[BOJ] 2667. 단지번호붙이기 (Python/DFS/Silver 1)

[Baekjoon] 2667. 단지번호붙이기Silver 1 | #DFS #그래프탐색문제 바로가기 🔗1. 문제 요약정사각형 모양의 지도에서 1(집이 있는 곳)이 상하좌우로 연결된 그룹(단지)을 찾고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 문제이다.2. 문제 풀이 방식DFS(깊이 우선 탐색): 지도를 순회하며 1을 발견하면 DFS를 시작한다.방문 처리: 탐색한 집은 다시 방문하지 않도록 0으로 값을 변경한다.상하좌우 이동: dx, dy 배열을 활용해 인접한 좌표를 탐색한다.3. 전체 코드 (Python)import sysinput = sys.stdin.readlineN = int(input())graph = [list(map(int, input().strip())) for _ in r..

[Programmers/알고리즘 고득점 KIT] 올바른 괄호

[Programmers] 올바른 괄호Level 2 | #스택/큐 #스택(Stack)문제 바로가기 🔗1. 문제 요약괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 ')' 문자로 닫혀야 한다는 뜻이다.문자열 s가 올바른 괄호이면 True를, 아니면 False를 반환한다.2. 접근 방식 및 포인트가장 최근에 열린 괄호가 가장 먼저 닫혀야 하므로 LIFO(Last-In-First-Out) 구조인 스택을 활용한다.✅ 열기: '('를 만나면 스택에 무조건 push한다.✅ 닫기: ')'를 만나면 스택에서 pop하여 짝을 맞춘다.✅ 예외: 닫으려는데 스택이 비어있거나, 모든 검사가 끝났는데 스택에 괄호가 남아있으면 잘못된 괄호이다.3. 구현 코드 (Python)def solution(s): sta..

[TIL] Git과 GitHub

Git과 GitHub: 버전 관리의 핵심 이해목차1. Git과 GitHub의 차이2. Git의 동작 원리 (3가지 공간)3. 버전 관리의 중요성1. Git과 GitHub의 차이이 둘은 '프로그램'과 '저장소'라는 명확한 차이가 있습니다.Git (깃): 내 컴퓨터의 "타임머신"핵심 역할: 파일을 감시하며 모든 변화를 기록하고 추적합니다.버전 관리: 시간대별, 기능별로 각기 다른 버전을 관리할 수 있습니다.협업: 여러 명이 동시에 수정해도 충돌을 추적하여 합칠 수 있게 합니다.GitHub (깃허브): 소셜 "클라우드 저장소"핵심 역할: 내 컴퓨터(Local)의 Git 기록을 올려두는 온라인 서비스입니다.공유와 협업: 전 세계 어디서든 내 프로젝트에 접근할 수 있습니다.생태계: GitLab, Bitbucket..

🚀 Growth/TIL 2026.04.02

[Java] 가비지 컬렉터 (Garbage Collector, GC)

가비지 컬렉터 (Garbage Collector, GC)와 메모리 관리목차1. 가비지 컬렉터란?2. 왜 필요한가? (메모리 누수 방지)3. 언어별 메모리 관리 체계4. 가비지 컬렉터의 한계와 동작 원리5. 메모리 관리 실천 꿀팁1. 가비지 컬렉터란?프로그램이 동적으로 할당했던 메모리 영역(Heap) 중에서 더 이상 사용하지 않는 객체를 찾아 자동으로 해제해주는 엔진입니다.2. 왜 필요한가?메모리 누수(Memory Leak)를 방지하기 위함입니다. 사용이 끝난 메모리를 해제하지 않고 계속 들고 있으면, 시스템의 메모리가 고갈되어 프로그램이 멈추거나 느려집니다. 가비지 컬렉터는 개발자가 실수로 메모리 해제를 빠뜨려도 대신 처리해주어 프로그램의 안정성을 높여줍니다.3. 언어별 메모리 관리 체계구분특징Manag..

☕ Backend/Java 2026.04.02

[OS] 프로세스와 스레드

🧵 프로세스와 스레드: 동시성을 지탱하는 운영체제의 핵심목차1. 프로세스 vs 스레드 (개념과 자원 할당)2. 동시성(Concurrency)과 병렬성(Parallelism)3. 컨텍스트 스위칭(Context Switching)과 비용4. 자바에서의 멀티스레드 구현과 제어5. 핵심 요약 및 카테고리 추천1. 프로세스 vs 스레드실행 중인 프로그램은 운영체제로부터 자원을 어떻게 할당받느냐에 따라 프로세스와 스레드로 나뉩니다.프로세스(Process): 운영체제로부터 자원을 할당받는 작업의 단위입니다. 실행 중인 프로그램 그 자체를 의미하며, 독립된 메모리 영역(Code, Data, Stack, Heap)을 가집니다.스레드(Thread): 프로세스 내에서 실행되는 흐름의 단위입니다. 프로세스가 할당받은 자원을..

[Java] 객체지향 프로그래밍(OOP)

💎 객체지향 프로그래밍(OOP) 핵심 4대 원칙과 설계 철학목차1. 객체지향이란? (클래스와 객체)2. OOP의 4대 핵심 원칙 (캡슐화·상속·다형성·추상화)3. 결정적 차이: 상속(is-a) vs 인터페이스(can-do)4. 핵심 요약 및 카테고리 추천1. 객체지향 프로그래밍(OOP)이란?객체지향이란 프로그램을 단순한 명령어의 집합이 아니라, 서로 상호작용하는 '객체'들의 모임으로 파악하는 방법론입니다. 현실 세계의 사물을 소프트웨어 안으로 옮겨온다고 생각하면 쉽습니다.🏗️ 클래스 (Class)객체를 만들기 위한 설계도입니다.(예: 붕어빵 틀, 자동차 설계도)🚗 객체 (Object / Instance)설계도를 바탕으로 실체화된 결과물입니다.(예: 갓 구운 붕어빵, 실제로 달리는 자동차)2. OOP..

☕ Backend/Java 2026.04.02

[TIL] 개발 기본 용어

💻 개발 기본 용어목차1. 디버깅 (Debugging) 이란?2. 컴파일러 vs 인터프리터3. 빌드(Build)와 배포(Deploy)4. 환경변수 (Environment Variable)5. 라이브러리와 프레임워크의 차이1. 디버깅 (Debugging) 이란?"내 코드가 왜 안 돌아가지?"라는 질문에 답을 찾아가는 과정입니다.의미: 소프트웨어에 발생하는 문제(버그)의 원인을 찾아 해결하는 과정입니다.유래: 최초의 컴퓨터 중 하나인 '하버드 마크 II' 기계 안에 실제 나방이 들어가 오류를 일으켰던 것을 찾아서 제거한 일에서 유래되었습니다.버그가 발생하는 이유구문 오류 (Syntax Error): 오타나 문법 실수.논리적 오류 (Logic Error): 코드는 실행되지만 결과가 예상과 다른 경우.환경적 ..

🚀 Growth/TIL 2026.04.01

[OS] 가상 메모리(Virtual Memory)

💻 OS 가상 메모리(Virtual Memory) 개념 및 작동 원리목차1. 가상 메모리란? (핵심 장점)2. 프로그램 실행의 의미 (주소 바인딩 & 스왑)3. 작동 원리: 요구 페이징 (Demand Paging)4. 요약: 메모리 관리의 예술1. 가상 메모리란?가상 메모리는 프로세스 전체가 메모리(RAM)에 올라오지 않더라도 실행이 가능하도록 하는 메모리 관리 기법입니다. 실제 물리적 메모리 크기보다 더 큰 프로그램을 실행할 수 있게 해주는 아주 똑똑한 기술이죠.가상 메모리의 핵심 장점물리 메모리 제약 극복: 사용자 프로그램이 실제 RAM 용량에 신경 쓰지 않고 설계될 수 있습니다.동시 수행 능력 향상: 각 프로그램이 당장 필요한 부분만 메모리에 올리므로, 더 많은 프로그램을 동시에 올릴 수 있습니다..

[Database] MVCC(다중 버전 동시성 제어)

📂 데이터베이스 MVCC 실전: Lost Update와 Write Skew 해결목차1. MVCC(다중 버전 동시성 제어)란?2. 격리 수준(Isolation Level)별 동작 차이3. Lost Update 해결: Locking Read (FOR UPDATE)4. Write Skew(쓰기 왜곡) 현상과 해결5. MySQL vs PostgreSQL: 실전 동작 및 Serializable 비교6. Q&A 및 최종 요약1. MVCC란 무엇인가?다중 버전 동시성 제어(Multi-Version Concurrency Control)는 데이터 접근 시 해당 시점의 스냅샷(버전)을 보여주어 동시성을 높이는 기법입니다. 핵심 원칙은 "읽기는 쓰기를 막지 않고, 쓰기는 읽기를 막지 않는다"는 것입니다.작동 방식: 데이터..

[Programmers/알고리즘 고득점 KIT] 기능개발

[Programmers] 기능개발Level 2 | #스택/큐 #큐(Queue)문제 바로가기 🔗1. 문제 요약각 기능의 개발 진도와 개발 속도가 주어질 때, 뒤에 있는 기능은 앞의 기능이 배포될 때 함께 배포되어야 한다.각 배포마다 몇 개의 기능이 배포되는지를 계산하여 리스트로 반환하는 문제이다.2. 접근 방식 비교먼저 모든 기능의 남은 작업 일수(days)를 올림 연산으로 계산한 뒤, 배포 그룹을 묶는다.🤔 왜 큐(Queue)가 더 적합할까?기능은 항상 **먼저 들어온 순서대로** 배포되어야 한다. 이러한 **FIFO(First-In-First-Out)** 특성이 이 문제의 배포 규칙과 정확히 일치하므로, 앞에서 데이터를 제거하는 큐를 사용하는 것이 알고리즘적으로 더 명확하다.3. 권장 풀이: 큐(Q..

[Spring] @Transactional

🌱 Spring @Transactional 동작 원리 및 핵심 컴포넌트목차1. 트랜잭션 기초 및 수동 제어의 한계2. @Transactional의 동작 원리 (AOP & Proxy)3. 핵심 컴포넌트: Manager & Synchronization4. 전체 실행 흐름도1. 트랜잭션 기초 및 수동 제어트랜잭션은 DB 상태를 변환시키는 하나의 논리적 작업 단위로, 원자성(All or Nothing)을 보장해야 합니다.⚠️ 수동 제어의 문제점connection.setAutoCommit(false); try { // 비즈니스 로직 connection.commit(); } catch (Exception e) { connection.rollback(); }핵심 로직에 트랜잭션 코드가 섞여 가독..

728x90