벨만-포드 알고리즘 개념 최단 경로를 구하는 알고리즘으로 음의 가중치가 있는 경우에도 사용할 수 있는 알고리즘이다. 주로 음수 가중치가 있는 그래프에서 최단 경로를 찾거나, 사이클 유무를 판별하는 데 사용한다. 작동 원리 반복적인 최단 거리 갱신: 각 간선을 반복적으로 확인하고, 최단 경로가 발견될 때마다 경로를 갱신한다. 음수 사이...
99클럽 코테 스터디 4일차 TIL (벨만-포드)
99클럽 코테 스터디 3일차 TIL (플로이드-워셜)
문제 BOJ 2660 - 회장뽑기 해결 방법 친구 관계를 입력받을 때 무방향 그래프처럼 양쪽에 값을 입력해준다. 플로이드-워셜 알고리즘을 사용해 모든 정점을 최솟값 친구 관계로 갱신한다. 각 회원의 최댓값을 구한 후 이 최댓값이 가장 작은 사람이 회장후보로 등록된다. 회원의 점수를 구할 때 총점을 구하는 것이 아닌...
99클럽 코테 스터디 2일차 TIL (플로이드-워셜)
문제 BOJ 1389 - 케빈 베이컨의 6단계 법칙 해결 방법 친구 관계를 입력받을 때 무방향 그래프처럼 양쪽에 값을 입력해준다. 플로이드-워셜 알고리즘을 사용해 모든 정점을 최솟값 친구 관계로 갱신한다. 친구 관계의 케빈 베이컨 수를 구해서 번호가 제일 작은 사람을 구한다. 정답 코드 - JAVA import java.io.*...
99클럽 코테 스터디 1일차 TIL (플로이드-워셜)
플로이드-워셜 알고리즘 개념 최단 경로를 구하는 알고리즘으로 한 번 실행하여 모든 노드 간 최단 경로를 구할 수 있다. 다익스트라 알고리즘처럼 단일 정점에서 모든 정점으로의 최단 경로가 아니라, 그래프 내 모든 쌍의 정점에 대해 최단 경로를 찾는 데 주로 사용된다. 작동 원리 정점 간 최단 경로를 점진적으로 갱신하여 찾는다. 이때 경유지 개념...
Docker의 진화와 내부 구조 (containerd, runc, containerd-shim의 역할)
Docker의 역사 Docker는 처음 나왔을 때, 하나의 데몬 프로세스(Docker Daemon == dockerd)가 컨테이너의 생성, 관리, 실행 등 모든 작업을 처리했다. 그러나 Docker가 인기를 얻고, 컨테이너 기술이 확장되면서 dockerd에서 모든 기능을 처리하는 것이 점점 더 복잡해졌다. 이를 해결하기 위해, Docker는 컨테이...
Docker?
도커(Docker)란 소프트웨어 컨테이너화를 통해 애플리케이션을 더 쉽게 개발, 배포, 실행할 수 있게 해주는 오픈 소스 플랫폼이다. 컨테이너화 기술은 개발자가 코드와 그 코드의 모든 종속성을 함께 묶어 컨테이너(Container)로 배포할 수 있게 해주는 기술로, 간단하게 말하면 컨테이너를 생성하고 관리하기 위한 도구이다. Container? 컨...
스프링 빈 / 스프링 컨테이너
앞선 게시글에서 스프링 프레임워크를 사용하면 객체를 직접 생성하고 관리하는 대신 스프링 빈으로만 등록하면 된다고 했었다. 그럼 스프링 빈이 무엇인지 알아보자. 자바 빈? 자바 빈은 자바 객체를 나타내기 위한 규약(Getter/Setter, 기본생성자 등)일 뿐이다. 스프링 빈과는 전혀 다른 개념이다. 스프링 빈이란 스프링 컨테이너가 관리하...
객체 지향 특징 / SOLID 원칙
앞선 게시물에서 의존주입을 사용하면 객체 지향 특징을 잘 지킬 수 있으며 쉽게 객체 지향 설계를 만족할 수 있다고 했다. 그럼 객체 지향의 특징과 객체 지향 설계 원칙에 대해 알아보자. 객체 지향 특징 캡슐화 객체의 데이터를 외부로부터 보호하고, 데이터 접근과 조작방법을 제한하는 기법이다. 즉, 외부의 무분별한 데이터 접근을 막는 방법으로 외부로...
스프링이란?
스프링이란? 스프링은 웹 개발에서 많이 사용하는 프레임워크로 웹 개발만을 위한 프레임워크라고 생각하기 쉬운데, 사실 스프링 프레임워크는 JAVA의 객체지향적 특성을 효과적으로 활용하도록 도와주는 프레임워크이다. 그럼 스프링은 어떤 방식을 사용하여 효과적으로 도와줄까? 그 방법에 대해 알아보자. IoC / DI 스프링은 객체지향 프로그래밍을 돕기...
테스트코드 (JUnit5)
테스트 코드를 작성하는 이유? 개발 과정에서 문제를 미리 발견할 수 있다. 리팩토링의 리스크가 줄어든다. 애플리케이션을 가동해서 직접 테스트하는 것보다 테스트를 빠르게 진행할 수 있다. 하나의 명세 문서로의 기능을 수행한다. 몇 가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산할 수 있다. 코드가 작성된 목적을 ...