2024/04 15

깃허브 액션, 도커, EC2, RDS를 통해 배포하기

도커를 처음 사용해보며 3일 간 많이 헤맸지만 그만큼 많이 배운 거 같다. 다음에 같은 실수를 반복하지 않기 위해 이번에 도커를 사용한 과정을 기록하고자 한다.배포 과정1. RDS 생성, EC2 서버 구축 및 설정우선 AWS의 RDS와 EC2를 생성해야 한다.  그리고 EC2 서버에 도커 컨테이너를 통해 자바 프로그램을 실행시킬 것이기 때문에 EC2 서버에 도커를 설치해야 한다. ssh를 통해 EC2 서버에 접속한 다음, 이 블로그를 따라 서버에 도커를 설치하면 된다. 설치 후에는 docker --version을 통해 설치된 도커 버전을 확인할 수 있다. 이어서 자바 프로그램 외에도 redis도 도커 컨테이너로 띄워야 하므로, docker pull redis 명령어를 통해 redis 이미지를 pull 받..

Backend/Docker 2024.04.26

도커(Docker) 사용하기

도커를 통해 프로젝트 구동시키기1. 서버에 Docker 설치하기다음 블로그 (https://everydayyy.tistory.com/121)를 따라 서버에 Docker를 설치하면 된다.2. 이미지 생성하기도커에는 스프링부트 프로젝트, MySQL, Redis가 각각 컨테이너로 생성되어야 한다. 그리고 컨테이너를 실행시키기 위해서는 도커 이미지가 필요하다.2-1. 스프링부트 프로젝트 이미지 생성우선 스프링부트 프로젝트를 기반으로 도커 이미지를 생성해보자. 이를 위해서는 프로젝트 내에 도커 파일을 생성해줘야 한다. 도커 파일은 도커가 이해할 수 있는 설정 파일로, 도커 이미지를 만드는데 필요한 정보를 담고 있다. 따라서 어떤 자바를 사용할 것인지, 어떤 jar 파일을 사용할 것인지 등을 설정해줘야 한다. 내가..

Backend/Docker 2024.04.24

[백준] 2240. 자두나무

https://www.acmicpc.net/problem/2240 2240번: 자두나무 자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어 www.acmicpc.net 이 문제는 처음에 봤을 때는 풀이를 봐도 이해를 못했다가 다음 날 다시 차근차근 생각해보니 스스로 풀 수 있었던 문제이다. 역시 dp는 i = 0부터 하나씩 생각하면서 dp 배열을 채워나가다 보면 규칙을 발견하게 되는 거 같다. 1초일 때, 2초일 때, ... w초일 때까지의 최대로 획득한 자두 개수를 구해야 한다. 그런데 몇 번 움직였는지에 따라 경우가 나뉘므로 dp 배열은 2차원 배열로, dp[][] ..

CS/Algorism 2024.04.22

[백준] 11562. 백양로 브레이크

https://www.acmicpc.net/problem/11562 11562번: 백양로 브레이크 서울 소재 Y모 대학교에서 대규모 공사를 진행하면서, 학교가 마치 미로처럼 변해버리고 말았다. 공사 이전까지는 어떤 건물에서 출발하더라도 다른 모든 건물로 갈 수 있는 길이 있었으나, 공 www.acmicpc.net 플로이드 워셜 알고리즘을 통해 간단한 풀이가 나오는 문제이다. 그런데 나는 플로이드는 알았지만 알고리즘을 적절하게 사용하는 아이디어를 떠올리지 못해서 못 푼 문제이다. 양방향으로 바꿔야 하는 길의 수를 찾아야 한다. 따라서 양방향으로 바꿔줄 필요가 없으면, 길을 1번 건너든 2번 건너든 같다. 즉, start 노드와 end 노드가 양방향 길을 가졌으면, dist[start][end] = 0, ..

CS/Algorism 2024.04.21

[백준] 1600. 말이 되고픈 원숭이

https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 도착점에 도착하는 최소 시간을 구하면 되므로 bfs를 사용하면 된다. 말의 움직임으로 움직일 수도 있고, 상하좌우로 움직일 수도 있다. 따라서 하나의 노드에 최소 시간으로 도착하는 경로는 여러 개일 수 있다. 예를 들어 (0, 0)에서 (1, 1)로 이동한다고 가정했을 때, 다음과 같이 2가지 방법으로 최소 시간으로 도착할 수 있다. 상하좌우로만 움직였을 때: 2의 시간이 걸린다..

CS/Algorism 2024.04.18

[백준] 8980. 택배

https://www.acmicpc.net/problem/8980 8980번: 택배 입력의 첫 줄은 마을 수 N과 트럭의 용량 C가 빈칸을 사이에 두고 주어진다. N은 2이상 2,000이하 정수이고, C는 1이상 10,000이하 정수이다. 다음 줄에, 보내는 박스 정보의 개수 M이 주어진다. M은 1이 www.acmicpc.net 이 문제는 그리디로 풀면 된다. 트럭에 실을 수 있는 택배의 총량이 c인데, c는 최대한 도착점이 가까운 택배들로 채워져야 한다. 그래야 금방 택배를 내리고 새로운 택배를 실을 수 있기 때문이다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja..

CS/Algorism 2024.04.16

[백준] 16929. Two Dots

https://www.acmicpc.net/problem/16929 16929번: Two Dots 첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문 www.acmicpc.net 인접한 같은 알파벳들을 탐색하며 사이클 유무를 판단하면 된다. 이때 dfs를 사용하면 된다. 처음에 bfs로 시도했는데, 사이클 유무를 판단하는 것이 목적이므로 dfs가 더 적합한 거 같다. dfs로 탐색하다가, 다음 노드가 탐색의 시작 노드와 같아지면 사이클이 존재하는 것이다. 그런데 다음과 같은 경우, (0, 0)의 A 노드를 시작으로 dfs를 했을 때 사이클이 존재하지 않는다. 따라..

CS/Algorism 2024.04.12

[백준] 1261. 알고스팟

https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net bfs를 통해 (0, 0)부터 (n-1, m-1)까지 이동하면 된다. 다음 노드가 방이면 이어서 이동하고, 다음 노드가 벽이면 부수고 이동한다. 즉, 큐에 벽을 부순 횟수도 담아주어야 한다. 그리고 벽을 부쉈을 때 굳이 1을 0으로 변경해줄 필요가 없으며, 방문처리만 해주면 된다. 중요한 점은 우선순위 큐를 사용해서, 벽을 부순 횟수가 적은 노드부터 꺼내야 한다는 것이다. 만..

CS/Algorism 2024.04.11

[백준] 17182. 우주 탐사선

https://www.acmicpc.net/problem/17182 17182번: 우주 탐사선 우주 탐사선 ana호는 어떤 행성계를 탐사하기 위해 발사된다. 모든 행성을 탐사하는데 걸리는 최소 시간을 계산하려 한다. 입력으로는 ana호가 탐색할 행성의 개수와 ana호가 발사되는 행성의 위 www.acmicpc.net 예를 들어 n이 3이고 시작점이 0일 때, (0 ➡️ 1로 가는 거리 + 0 ➡️ 2로 가는 거리)가 아닌 (0 ➡️ 1로 가는 거리 + 1 ➡️ 2로 가는 거리)가 더 짧을 수도 있다. 즉, 시작점에서 각 노드로 가는 거리만 최소로 갱신할 것이 아니라, 모든 노드에서 모든 노드로의 거리를 최소로 갱신하여 비교해야 한다. 따라서 플로이드 워셜을 사용해야 한다. 플로이드 워셜을 통해 map 배..

CS/Algorism 2024.04.11

[백준] 2531. 회전 초밥

https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 투포인터 문제로 주의할 점은 다음과 같다. 최대 초밥 종류의 개수를 구해야하므로, 굳이 k 미만의 접시를 고를 필요가 없으며, 정확히 k개의 접시를 고르면 된다. 즉, 투포인터보다 슬라이딩 윈도우로 푸는 것이 더 적합하다! (start와 end가 함께 이동하며 그 범위가 k로 유지) 먹은 초밥을 배열로 관리한다(eat[30] = 1이면, 30번의 초밥을 1개..

CS/Algorism 2024.04.10