https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 접근방식 dp 배열을 만들어서 dp[현재위치값] = 현재 위치값+ max(이동할 수 있는 위치 값) 으로 값을 갱신하며 최대,최솟값을 구한다. 처음 풀이 import sys input = sys.stdin.readline n = int(input()) arr = [list(map(int, input().split())) for _ in range(n)] dp_max = [[0] * 3 for _ in range..
https://www.acmicpc.net/problem/1520 1520번: 내리막 길 첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. www.acmicpc.net 각 칸에 그 지점의 높이가 쓰여 있고, 각 지점의 이동은 상하좌우 이웃한 곳끼리만 가능하다. 제일 왼쪽 위칸에서 제일 오른쪽 아래칸으로 가는데 항상 높이가 더 낮은 지점으로만 이동하는 경우의 수를 구하자. 접근 방식 DP를 이용해 지나갈때마다 방문표시를 해 그 지점에 카운트를 시키며 지나가 마지막 경로에 도착시 1을 리턴하며 시작점 DP값에 증감시켜 경우의 수를 구한다. DFS를 이용해 상화좌우..
https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 접근 방식 같은 색상이 상하좌우로 인접한 경우에 두 글자는 같은 구역에 속한다. -> 상하좌우 리스트를 만들어서 bfs를 이용해 같은 구역을 추출한다. -> 그림 안에서 bfs로 방문표시와 함께 같은 구역을 추출해 크게 구역을 나눈다. 적록색약인 경우 그림에서 R과 G를 같게 설정한뒤 bfs를 통해 구역을 나눈다. -> 위에서 썼던 방문표시리스트를 초기화해서 bfs를 돌아 구역을 나눈다. ..
gradle설정파일에 ElasticSearch버전과 호환이 되는 Spring-Data-Elasticsearch 설정을 해줍니다. ElasticSearch 7.17.12를 써서 그에 맞는 버전으로 설정을 해줬습니다. implementation 'org.springframework.data:spring-data-elasticsearch:4.4.12' //elasticsearch Application.yml 설정파일에 ElasticSearch와 연결할 host와 port번호를 설정해줍니다. spring: elasticsearch: host: #host port: 9200 High Level REST Client를 사용해 elasticsearch와 연결을 설정합니다. @Configuration @EnableEl..
배포하는 과정에서 application.yml을 포함해 secret 파일들의 값들을 설정해줘야 했다. 젠킨스 파이프라인을 이용해서 secret 파일의 변수들을 sed 명령어를 이용해 치환해서 적용을 시켜주었다. jwt: secret: jwt_secret # secret haebang: secret: key: haebang_secretkey # secret spring: sql: init: mode: never data-locations: classpath:data.sql datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://datasource_url?createDatabaseIfNotExist=true&useUnicode= t..
도커 컨테이너로 redis를 실행하던 도중 배포를 할때마다 redis에 있는 저장된 데이터도 같이 삭제되는 문제가 발생했다. 여러 이유중 하나는 redis-cli를 설정할때, 비밀번호를 설정해주지 않았기 때문이다. # 레디스 설정 및 실행 docker run -v /path/on/host:/data \ --name my-redis \ -p 6379:6379 \ -d redis:latest redis-server --appendonly yes --requirepass '비밀번호' --requirepass [비밀번호] 명령어로 비밀번호를 설정해준다. redis server 에 접속을 해 확인을 하면 NOAUTH Authentication required. 라는 에러가 나온다. auth [비밀번호]를 입력해주..
프로젝트에서 젠킨스를 도커 컨테이너로 돌려 Dockerfile로 컨테이너 실행 시 jar파일을 실행하게 만들고, 그 Dockerfile을 이미지로 빌드 후 dockerhub쪽에 push를 하게 만들었습니다. push 된 이미지를 다시 배포용 ec2 서버에 pull 받아 도커 컨테이너로 실행하게 만들었습니다. stage('Build and Push Image') { steps { script { def imageName = 'haebang/haebang:jenkins' // Build Docker image docker.build(imageName, '-f ./Dockerfile .') // Login to DockerHub docker.withRegistry('https://registry.hub.doc..
프로젝트를 진행하는 중 검색한 지역을 기준으로 인기 지역 TOP5의 랭킹을 구현해야했다. 지역을 검색할 때 마다 데이터가 계속 업데이트되고 , Redis의 Sorted Set을 이용하면 랭킹을 쉽게 구현할 수 있을거 같아 Redis를 이용해 인기 지역 TOP5 랭킹을 구현했다. 하지만 Redis는 특성 상 같은 점수를 중복처리를 하지않고, value값으로 다시 정렬하기에 동점데이터가 있을때, 따로 처리를 해줘야한다. 내가 동점처리한 방법은 Map 자료구조를 이용해 score값을 기준으로 다시 검색데이터를 분류해 같은 score값을 가진 데이터를 카운트 해준뒤, reverseRange()를 이용해 동점처리 된 데이터도 공동순위에 들어가게 구현하였다. 지역을 검색할때마다 해당 검색어(지역)을 value에 저..