그래프를 활용하여 최단 경로를 구할 수는 없을까? 최단경로 알고리즘은 크게 3가지가 존재한다. 이번 시간에는 다익스트라만 다루도록 하겠다. 다익스트라란? 음의 가중치가 없는 그래프의 한 정점에서 모든 정점까지의 최단거리를 각각 구하는 알고리즘이다. 정점 사이에는 가중치가 존재한다. 최단경로의 특징 정점 x까지 최단거리로 가기 위해서는 그 직전까지도 최단거리로 가야 한다. 위의 그림을 보면 1 - 6 - 2 - 3 - 8 - 7 순으로 이동한다. 최단경로의 특징을 이용하면 1~8까지 이동할 때에도 최단 경로로 이동한다. 그래서 최단경로 트리를 어떻게 만들 것인가? T(i) = i까지 도달하는 최단거리 -> 파란색 숫자 순서를 그림을 이용하여 천천히 설명하겠다. 보라 색원은 이미 탐색을 완료했다는 의미이다...
이번 5기 모집에서 불합격하였다. 처음에는 매우 아쉬운 마음이 크게 들었다. 스스로가 열심했다고 생각했지만, 다른 사람이 보았을 때는 아직 부족한 점이 많은 것 같다. 다음 6기를 목표로 삼고 다시 열심히 성장할 생각이다. 이번 우 테코를 통해 정말 많은 것을 배웠다. 최종 준비를 위해 4기와 3기 문제를 풀었었는데, 이러한 과정 속에서 내가 부족한 점이 무엇인지 알게 되었다. 뿐만 아니라 다른 사람들의 코드를 보고 배울 점이 무엇인지 생각해보았다. 1. 일급 컬렉션 가장 처음 배운 점은 일급 컬렉션이다. 일급 컬 렌셔의 규칙을 적용하는 것은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렌션은 그 자체로 포장돼 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이..
AWS RDS Amoazon Relational Database Service 클라우드에서 관계형 데이터베이스를 간편하게 설정, 운영 및 확장할 수 있는 관리형 서비스 모음 주요 기능 RDS 백업: 자동 백업, DB 스냅샷 멀티 AZ: 두 개 이상의 AZ에 걸쳐 DB를 구축하고 원본과 다른 DB(standby)를 자동으로 동기화(Snyc), 읽기 전용 복제본 CloudWatch 연동: DB 인스턴스의 모니터링 (디테일 모니터링, CPU, Storage 사용량, 그 이외의 Error Log) AWS Aurora Amazon Aurora Aurora 플랫폼은 AWS만의 관계형 데이터베이스로써 기존의 소스를 커스터 마이 징하 여 AWS에 최적화시킨 것 (RDS가 커피라면, Aurora는 TOP) RDS에서 사..
AWS EC2 Amazon Elastic Cloud Compute 가장 기본적인 형태의 클라우드 컴퓨팅 (= 클라우드 컴퓨터 한 대) 온디맨드: 선결제 금액이나 장기 약정 없이 저렴하고 유연하게 Amazon EC2를 사용하기 원하는 사용자 스폿 인스턴스: 시작 및 종료 시간이 자유로운 애플리케이션 Saving Plans: 1년 또는 3년 기간의 일정 사용량 약정을 조건으로 EC2 및 Fargate 사용량에 대해 저렴한 요금을 제공하는 유연한 요금 AWS Elastic Beanstalk Amazon Elastic Beanstalk AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있는 서비스 (애플리케이션 코드를 업로드하기만 하면 작동) Elastic Beanstalk = EC2 + 배포 버전..
AWS란? 아마존에서 제공하는 클라우드 서비스로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공하고 있다. 자바는 JVM 위에서 돌아가기 때문에 serverless환경으로 잘 돌리지 않는다. AWS VPC Virtual Private Cloud 가상 네트워크 서비스로 퍼블릭 네트워크와 프라이빗 네트워크를 분리하고 모니터링할 수 있도록 해주는 서비스 네트워크 구성과 관련된 사실상 모든 기능을 담당하며, 자체 데이터 센터에서 운영하는 기존 네트워크와 매우 유사한 형태 AWS API Gateway 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전 관리형 서비스 서버의 “대문”과 같은 역할 API Gatewa..
개발일기 (22.11.27) 우 테코 프리코스를 진행하면서, 많은 것을 느꼈다. 프리코스를 진행하기 이전에, 나는 스스로 학습하는 법을 몰랐던 것 같다. 어떤 것을 공부해야 하는지도 정확하게 알지 못하였고, 그냥 흘러가는 대로 공부했던 것 같다. 하지만 이번 프리코스 동안 스스로 공부하는 법을 알게 되었다. 내가 모르는 부분을 찾아보고, 그것을 내 것으로 만들려고 노력하였다. 이러한 과정 속에서 정말 많은 성장을 하였다. 지금 시점에서 내가 작성하였던 코드들을 보니 많은 부족함이 보였다. 그때 당시에는 그 코드가 깔끔하고, 좋다고 생각하였다. 이러한 차이는 내가 많이 발전했다는 것을 증명해주는 것 같다. 오늘 프리코스 2주 차 미션을 다시 풀어보았다. 그리고 내가 작성했던 코드와 비교해보았다. 그 전 ..
https://school.programmers.co.kr/learn/courses/30/lessons/138477 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 그림은 문제의 일부분이다. 핵심 문제를 간단하게 해석하면, socre는 하루하루 추가되는 점수이다. k의 개수 개까지 명예의 전당에 오르게 된다. -> 상위 k개에서 가장 낮은 점수가 커트라인이 된다. 발표 점수는 커트라인으로 이루어져 있다. 정답 코드, 스트림을 활용 import java.util.ArrayList; import java.util.Comparator; import java..
4주 차 미션을 마지막으로 프리코스가 종료되었다 어느 정도 틀이 주어진 채로 진행하였는데, 이를 잘 활용하기 위해 많은 고민을 하였다. 예를 들어 인터페이스가 주어졌을 때, 왜 인터페이스가 주어졌을까? 이를 활용하면 어떠한 장점이 있는지 등등 여러 가지로 공부하였다. 우선 알게 된 사실은 테스트를 돌리기 어려운 랜덤 값 생성을 인터페이스를 활용하여 테스트를 돌릴 수 있게 되었다. 단순히 기능 구현에 초점을 맞추지 않았다. 기능 구현은 누구나 할 수 있다. 나는 가독성과 효율성 둘 다 챙기고 싶었다. 그래서 처음에는 서비스를 생성하여 컨트롤러가 뷰와 도메인과 소통할 때 서비스를 거치도록 만들었다. 이는 오히려 가독성이 떨어지고 불필요한 과정이 되는 경우가 생기게 되었다. 그래서 이번 미션에서는 서비스를 제..
3주 차 미션이 끝났다. 이번 문제도 상당히 많은 부분에서 신경 쓸게 많았다. 예외처리 부분이 좀 힘들었다고 생각한다. 우선 사용자의 입력이 잘못 들어온 경우 IllegalArgumentException을 발생시켜야 하는데, 따로 커스텀하지 않을 경우 다른 예외가 발생하기 때문이었다. 그래서 어떠한 예외가 발생할지 계속해서 생각하면서 리펙토링 하였다. 그리고 처음 미션을 받았을 때, 도메인 내부에서 예외처리가 진행되어 있었다. 나는 기존에 View에서 데이터를 받고, 도메인으로 넘기기 전에 빠르게 예외처리를 진행해왔다. 하지만 이번 미션은 통일성을 생각하여 도메인에서 진행하였다. 이러한 부분은 아직 공부가 부족하여 장단점에 대해 더 생각해봐야겠다. 미션을 진행할수록 커밋수가 증가하는 것 같다. 이번에도 ..
그래프 순회 저번에 배운 깊이 우선 탐색(Depth First Search) - 스택을 이용하여 그래프를 순회하는 방법 너비 우선 탐색(Breadth First Search) - 큐를 이용하여 그래프를 순회하는 방법 너비 우선 탐색(BFS) 인접한 노드들을 우선 모두 색칠해 두고 뻗어나간다. 위의 그림에서 너비 우선 탐색을 사용한다고 하자. 우선 1을 큐에 넣고, (1)을 제거한다. -> 현재 노드 위치 1의 인접 노드인 2와 4를 큐에 넣는다. 이후 1의 이웃한 노드들이 모두 색칠되었으므로, 큐의 제일 앞 노드를 제거한다.(2) 2가 제거되었으므로 현재 노드 위치는 2이다. 2의 인접 노드인 3을 큐에 넣는다. 4는 이미 추가되어있으므로 추가하지 않음. 2의 인접 노드가 모두 색칠되었으므로, 큐의 제일..