문제 출저 https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net 문제 풀이 난이도가 있는 문제 n개가 주어집니다. 2개 이상의 문제를 선택해야 합니다. 그 중, 문제난이도의 합이 L 이상, R 이하, 선택 된 문제 중 최대 난이도 - 최소 난이도가 X 이상인 경우의 수를 구해야 합니다. DFS를 이용해 경우의 수를 구하는 걸로 문제 풀었습니다. 탐색할 때 문제의 합이 R보다 크면 탐색을 중단했습니다. 문제를 풀 때 최소값을 구할 때 초기값을 잘 못 설정하여 0%에서 계속 틀렸습니다. 최소값의 초기값을 Integer.MAX_VALUE로 두어 문제를 해결했습니다. ..
개요 이번에는 Spring Boot 프로젝트의 설정 정보를 Spring Cloud Config 서버를 통해 외부 저장소(Github)에서 가져와보려 합니다. 저번 글에서는 Spring Cloud Config 서버를 만들었으니 이번에는 예시로 서버(Product 서버)를 하나 만든 다음 Spring Cloud Config를 통해 연결해보겠습니다. 예시 서버 구현 의존성 추가 의존성 추가 중 bootstrap이 있습니다. 이 의존성을 추가하면 bootstrap.yml 사용한다는 의미입니다. bootstrap.yml은 application.yml 보다 먼저 실행되어지는 파일입니다. bootstrap.yml이 먼저 실행되면 로컬값보다 Spring Cloud Config에 의한 중앙저장소(외부 저장소, Githu..
Spring Cloud Config Spring Cloud Config란 MSA와 같은 여러 개의 서비스로 분산된 시스템에서 서버, 클라이언트 구성에 필요한 설정 정보를 외부 시스템에서 관리하는 것 입니다. 특징 하나의 중앙화된 저장소에서 구성 요소 관리 각 서비스를 다시 빌드하지 않고 적용 가능 개발, 테스트, 배포 등 용도에 맞는 설정 정보를 관리 우선 순위 Spring Cloud Config가 관리하는 설정 파일들은 우선 순위가 있습니다. application.yml - application-name.yml - application-name-.yml application.yml : 기본이 되는 파일 application-name.yml : 특정 서비스의 기본이 되는 파일 application-nam..
문제 출저 https://www.acmicpc.net/problem/1911 1911번: 흙길 보수하기 어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N(1 ≤ N ≤ 10,000)개의 물웅덩이가 생겼다. 월드학원은 물웅덩이를 덮을 수 있는 길이가 L(1 ≤ L ≤ 1,000 www.acmicpc.net 문제 풀이 웅덩이 n개, 판자의 길이 l 이 주어집니다. 웅덩의 시작과 끝이 주어질 때 몇 개의 판자로 웅덩이를 모두 막을 수 있는지 구해야 합니다. 정렬과 구현으로 문제를 풀었습니다. 웅덩의 시작 지점, 끝 지점으로 오름차순으로 이중 정렬을 했습니다. 그 다음은 int range 변수를 설정해서 판자를 표시했습니다. 시작지점부터 시작해서 while 문으로 계속..
문제 출저 https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제 풀이 학생들과 학생들이 선호하는 학생이 1차원 배열로 주어집니다. 이 때 서로를 가리키다 사이클이 완성되면 팀을 이루게 됩니다. 팀을 이루지 못한 학생들이 몇 명인지 구하는게 문제의 요구사항입니다. dfs와 방문 처리로 문제를 풀었습니다. visited와 finished라는 boolean 배열을 만들었습니다. visited : 사이클을 이루는 구성원인지 판단 finished : 이미 탐..
문제 출저 https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미 www.acmicpc.net 문제 풀이 세로 n, 가로 m인 2차원 배열이 주어지고 (1,1)에서 (n,m)으로 가야 합니다. 2차원 배열에는 벽이 1로 주어집니다. 이 때 최(n,m)으로 가기 위해 부숴야하는 최소한의 벽의 갯수를 구하는게 이 문제의 요구 사항 입니다. DP와 BFS로 풀었습니다. BFS로 Queue를 만들어 (1,1)을 시작점으로 하여 4방향 탐색을 시작했습니다. 2차원 d..
문제 출저 https://www.acmicpc.net/problem/2167 2167번: 2차원 배열의 합 첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는 www.acmicpc.net 문제 풀이 숫자가 있는 2차원 배열이 주어집니다. 이 때, 범위가 주어지는데 범위에 포함된 숫자들의 합을 구하는 것이 문제의 요구사항 입니다. 누적합으로 풀었습니다. prefix 2차원 배열을 만들어 i,j 지점에 0.0 부터 i,j 까지의 모든 숫자를 더한 값을 저장합니다. 그 후, 누적합 배열을 이용해 수식을 만들어 정답을 구했습니다. 소스 코드 pack..
문제 출저 https://www.acmicpc.net/problem/1743 1743번: 음식물 피하기 첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다 www.acmicpc.net 문제 풀이 음식물 쓰레기 위치가 주어졌을 때, 가장 큰 덩어리의 크기를 구하는게 문제입니다. 저는 BFS를 통해서 풀었습니다. 2차원 배열을 하나씩 탐색하면 음식물 쓰레기면 BFS를 통해서 덩어리를 구했습니다. 이를 통해 가장 큰 덩어리를 구했습니다. 소스 코드 package baekjoon.backjoon10.day1120.day18; impo..
문제 출저 https://www.acmicpc.net/problem/1446 1446번: 지름길 첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이 www.acmicpc.net 문제 풀이 d까지 가려 합니다. 이 때, 지름길이 주어집니다. 지름길은 시작점, 끝점, 걸린 길이가 주어집니다. 지름길을 적절히 활용하여 d까지 도착하는데 최소 거리를 구하려 합니다. 이 때, 도로는 일반 통행으로 역주행 할 수 없습니다. 즉 도착점이 d 보다 큰 지름길은 이용할 수 없습니다. dfs를 통해 구했습니다. 지름길을 이용하는 경우와 지름길을 이용할 수 없는 경우를..
문제 출저 https://www.acmicpc.net/problem/10431 10431번: 줄세우기 초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1 www.acmicpc.net 문제 풀이 20명의 학생들을 키 순서대로 줄 세우려고 합니다. 줄 세우는 방법은 한 명씩 세우는데 자기보다 큰 애가 있으면 그 앞에 서는 겁니다. 이 때 키가 큰 애들은 한 걸음씩 뒤로 갑니다. 주어진 배열대로 줄을 섰을 때 총 몇 검을 뒷걸음질 치는지 구해야 합니다. 이 문제는 테스트케이스가 독립적으루 주어지므로 각각의 케이스마다 답을 구해야 합니다. 시뮬레이션, 구현 문제입니다. 학생들을..
개요 이번에는 Kafka Connect을 이용하여 Spring Boot에서 데이터를 보내면 MySQL에 저장하는 로직을 구현해보려 합니다. 멀티 서버 환경에서 Kafka Connect을 이용하여 순차적으로 처리하여 동시성 문제를 해결할 수 있고 비동기적으로 처리하여 성능 향상을 기대할 수 있습니다. Spring Boot - Producer Spring Boot에서 MySQL에 DB에 저장하기 위해서는 정해진 패턴대로 메시지를 전송해야 합니다. 정해진 패턴이란 Schema 와 payload로 구성되어 있습니다. Schema는 Table의 구조를 나타내고 payload는 실제 데이터를 나타냅니다. 스키마를 참고하여 payload의 데이터를 Table에 넣는 식 입니다. 이전 글에서 본 Producer 구조와..
문제 출저 https://www.acmicpc.net/problem/1138 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 www.acmicpc.net 문제 풀이 1 ~ N 의 키를 가진 사람들이 주어진다. 이 때 왼쪽에 자신 보다 키 큰 사람이 몇 명 있는지 주어진다. 이 정보를 토대로 어떤 순서로 서 있는지 구해야 한다. 키가 큰 N부터 자리를 배정하는데 List에 넣었습니다. 자신의 차례일 때, List에는 자신 보다 키가 큰 사람만 있습니다. 왼쪽에 키 큰 사람 수에 해당하는 인덱스에 사람을 넣어 List를 완성했습니다...