본문 바로가기

전체 글67

[백준/C++] #11049 행렬 곱셈 순서 (DP) 문제https://www.acmicpc.net/problem/11049  구상행렬 곱셈 연산의 수의 최솟값을 구하는 문제였다. 해당 문제가 11066번(https://persi0815.tistory.com/47)과 같이 작은 부분을 통해 큰 부분의 값을 알아낼 수 있었다. 처음에 착각했던게, a b c d라는 배열이 있으면, abc * d와 a* bcd의 연산만 가능하다고 생각했었다. 사실 ab*cd도 되는데.. 그래서 해당 부분 수정해서 로직을 짰더니 성공 !!알고리즘이전에 구한 값으로 다음 값을 구하니 dp 유형이다.  풀이 + 코드dp[i][j]는 행렬 i부터 행렬 j까지의 최소 행렬 곱셈 연산 수이다. 최악의 연산수도 범위가 2^31-1보다 작다고 해서 int를 사용했다. #include#incl.. 2024. 7. 23.
[백준/C++] #11066 파일 합치기 (DP) 문제https://www.acmicpc.net/problem/11066 구상문제 풀이가 생각이 안나면 나는 일단 DP로 접근을 해본다. 이 문제도 그러했는데, DP로 접근해보니 풀이가 보였다. 이전 합치는 비용을 이용해서 다음 합치는 비용을 구했다. DP를 사용할 때는 획일화된 기준이 중요해서 첫 기준을 파일 길이로 잡고 다음 기준을 파일 시작 위치로 정했다. 그랬더니 파일 끝 위치는 저절로 설정할 수 있었고, 다음 기준을 분할 위치로 잡았다. 그렇게 마지막 식을 보면 알 수 있듯이 이전 값들을 이용해서 보다 큰 다음 비용을 구할 수 있었다. 알고리즘이전 합치는 비용 이용해서 다음 합치는 비용을 구하니까 DP를 이용했다.  풀이 + 코드dp[i][j]: 파일 i부터 j까지 합치는 데 필요한 최소 비용. .. 2024. 7. 23.
[백준/C++] #2293 동전1 (DP) 문제https://www.acmicpc.net/problem/2293구상나는 보통 문제를 보고 '어떻게 접근해야 할지 모르겠다...! 혹은 재귀인가..?'라는 생각이 들면 dp로 접근해본다. 이 문제도 그러했다. 오랫만에 dp를 풀어서 그런지 좀 머리를 싸맸는데, 동전의 구성이 같은데, 순서만 다른 것은 같은 경우라는 조건을 보고 동전의 가치를 큰 기준으로 잡고 가야겠다는 생각이 들었다. 글로 쓰기가 어려워서 그림으로 대체한다.  알고리즘이전에 구한 값을 이용하여 다음 값을 구하기에 dp(dynamic programming)를 이용했다. 풀이 + 코드#include #include #include #define endl "\n"using namespace std;int N, K;vector coins;v.. 2024. 7. 22.
[백준/C++] #20366 같이 눈사람 만들래? (Two Pointer) 문제https://www.acmicpc.net/problem/20366구상N개의 눈덩이를 가지고, 4개의 눈덩이를 골라, 2개의 눈사람을 만드는데, 두 눈사람의 높이의 차가 최소가 되도록 하여 최소인 높이 차를 출력하는 문제였다. 지금보면 진짜 바보같지만, 처음에는 진짜 내가 이걸 1초만에 생각해낸게 신기할 정도로 쉬워보이는 풀이 (결과적으로 틀린 풀이) 를 생각해냈다.  무엇이었냐 하면, 눈사람의 지름이 a, b, c, d라 하면, (a+b) - (c+d)의 값이 가장 작으면 되니까, (a-c)-(d-b)의 최소값을 구하면 되겠다 생각해서 눈사람의 지름 오름차순으로 정렬하고, 인접한 배열의 값끼리의 차를 구한 배열을 만들어서, 그걸 또 정렬해서(인덱스 값과 함께 pair로. 인접한것 고르면 안되니까),.. 2024. 7. 22.
[백준/C++] #16472 고냥이 (Two Pointer) 사실 어렵거나 함정이 있는 문제는 아니었는데... 그냥 문제 이름이 너무 귀여워서 포스팅한닷문제https://www.acmicpc.net/problem/16472구상최대 N개의 종류의 알파벳을 가진 연속된 문자열의 최대 길이를 구하는 문제였다. "연속된" 문자열의 길이라고 하니까 투 포인터로 접근할 수 있겠다 싶었다. 문자열의 인덱스값을 가리키는 lett와 right를 0부터 쭉쭉 나아가면서 left~right까지 사용하는 알파벳을 확인하면서 값 갱신하면 될듯했다.  알고리즘두개의 포인터를 이용하여 문제를 푸니까 Two pointer!! 풀이 + 코드1. 사용하는 알파벳이 N개 미만이거나 N개라면, 값 비교후 갱신하고, right ++, 개수 확인2. 사용하는 알파벳이 N개 초과라면, left++, 개수.. 2024. 7. 22.
[DevOps] CICD 추가 과정 1-2. Swagger에서 HTTPS 요청(springdoc) & HTTP로 요청시 HTTPS로 리디렉션 상황서비스의 api 도메인이 https 프로토콜을 사용하는데, swagger에서 이를 테스트할 수 있었으면 한다. 또한 추가로, http, local까지 이렇게 세 환경 모두를 테스트 가능하도록 하고자 한다. (사실 뒤에 가면 http 안쓰게 되긴 했다) 기존에 swagger를 https로 접속을 해도, http 서버로만 요청이 가능했다.→ 왜? 기본적으로 swagger는 http로 요청을 보내어, https로 요청을 보내기 위해서는 추가적인 작업이 필요하다. 그리고, https로 접속한 상태에서 http로 요청을 하니, cors에러가 떴다.→ 왜? 실서버 도메인과 요청하는 도메인이 다른 프로토콜을 쓰기 때문이다. → 즉, Origin이 달라서 cors에러가 발생하는 것이다.CORS 에러에 대해 더 자세.. 2024. 7. 17.
[백준/C++] #1202 보석 도둑 (Greedy) 문제https://www.acmicpc.net/problem/1202 구상k개의 가방을 가지고 있고, 각 가방에 최대 무게 c만큼의 보석 1개를 넣을 수 있는 문제였다. 이때, 가방에 넣어서 훔칠 보석의 최대 가격을 구하는 문제였는데, c무게보다 같거나 가벼운 보석중에 가장 가치가 큰 보석을 하나씩 골라 가방을 하나씩 채워나가면 된다.   그러기 위해서는 우선, 보석 무게와 가방 무게를 오름차순으로 정렬해야 했다. 이후, 가방을 하나씩 돌면서, 가방 무게보다 작은 무게의 보석들을 보면서 가치 하나하나를 max_heap에 넣은뒤, 가방 무게를 초과하기 직전 상태에서 max_heap의 top 가치를 total_value에 넣어야 한다. 중복되는 보석을 max_heap에 넣으면 안되기에 넣을 보석의 인덱스를 .. 2024. 7. 15.
[백준/C++] #11000 강의실 배정 (Greedy) 문제https://www.acmicpc.net/problem/11000  구상가장 처음에 왼쪽 그림처럼 2차원 배열을 만들어서 1번 강의실부터 시간들 채워나가며 몇번 강의실까지 사용하는지 알고자 했는데, S와 T의 범위가 10^9로 굉장히 커서 시간 복잡도에서 문제가 생겼다.  그래서 오른쪽 그림과 같은 구상을 했는데, 먼저, 주어진 S와 T를 배열에 넣고, S(시작 시간)기준으로 정렬한다. 그리고, 끝시간은 최소힙에 하나씩 넣고 시작시간과 비교해 시작시간이 최소힙에 있는 끝시간보다 같거나 크면 힙의 top값을 pop하고, 현재 강의 시간의 끝 시간을 최소힙에 넣는다. 남아있는 강의들 중에서 시작 시간이 가장 빠른 강의가 이미 배정된 강의 중에서 가장 끝시간이 빠른 강의 뒤에 올 수 있는지 판단하는 것이.. 2024. 7. 15.
[DevOps] CICD 추가 과정 2. dev, release db 만들기 이전에 캡쳐했던 사진들을 쓰니, 이름이 reborn으로 바뀐 점 주의바랍니다..! AWS가 제공하는 RDS를 사용하여 Dev, Release db를 만들어 보려고 합니다.  1. DB 위하여 subnet group 만들기Subnet group이란?데이터베이스 인스턴스가 배치될 서브넷의 집합을 정의하는 구성요소이다. rds는 vpc(virtual private cloud) 내에서 실행되며, rds 생성시 데이터베이스가 위치할 서브넷 그룹을 선택해야 한다.  왜 subnet group을 사용해야 하는가? - rds 인스턴스가 여러 가용 영역에 걸쳐 배포될 수 있도록 하여 장애 발생 시 서비스 중단을 방지한다. - rds 인스턴스가 어느 서브넷에 배포될지 명확하게 지정할 수 있다. (private 인지 pub.. 2024. 7. 10.
[DevOps] CICD 추가 과정 1. HTTPS 설정 1. AWS Certificate Manager내 도메인 다음과 같이 넣어주자 레코드까지 만들어주면..!만들어졌다! 2. ELB > Configuration > Instance traffic and scaling > Listener이렇게 SSL잘 선택해서 리스너 추가해주면 확인 한번 해주고~ 됐다!! dev, release db도 만들고 싶다면 요기로!https://persi0815.tistory.com/40 [DevOps] CICD 추가 과정 2. dev, release db 만들기이전에 캡쳐했던 사진들을 쓰니, 이름이 reborn으로 바뀐 점 주의바랍니다..!1. DB 위하여 subnet group 만들기1) dev subnet groupdev db는 public subnet을 사용한다.  2) re.. 2024. 7. 9.
[DevOps] CICD 구축 전과정 3. 코드 작성, PR, Merge + 도메인 설정 1. .ebextensions_dev00-makeFiles.configfiles: "/sbin/appstart": mode: "000755" owner: webapp group: webapp content: | #!/usr/bin/env bash JAR_PATH=/var/app/current/application.jar # run app killalljava java -Dfile.encoding=UTF-8 -Dspring.profiles.active=develop -jar $JAR_PATH01-set-timezone.configcommands: s.. 2024. 7. 9.
[DevOps] CICD 구축 전과정 2. Elastic Beanstalk 설정 (+IAM) 1. elastic beanstalk 기초 설정차근차근 무중단 cicd 위해 맞춤 구성해보자!  사전 설정은 맞춤 구성으로 하자  여기서..! 서비스 역할을 만들어야 한다. (IAM)\ IAM은 일차적 방어막(최소한의 기능)으로, 사용자 (계정) S3, 역할, 정책의 기능을 한다. Elastic Beanstalk이 정상적으로 작동하려면 두가지 역할이 필요하다. ELB 자체의 권한 & S3에 올림!EC2 권한 2.  IAM 만들기1. Elastic beanstalk 위한 IAM   2. ec2 위한 IAM  => IAM 최종 결과물   3. 남은 Elastic beanstalk 설정이렇게 만든걸 아까 하다 말단 elastic beanstalk 설정에 넣어주자!key pair은 나는 원래 있던거 썼다. 없다.. 2024. 7. 9.