본문 바로가기

전체 글

3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 3 3.3 컨테이너를 외부로 공개하기 위한 리소스 쿠버네티스 클러스터에서 동작하는 컨테이너를 클러스터 외부에서 접속할 수 있는 방법이다. 3.3.1 파드를 서비스로 묶기 쿠버네티스에서는 서비스(Service) 리소스를 이용하여 파드 여러 개를 하나의 DNS 이름으로 접속할 수 있다. 또한, 서비스를 이용하면 해당 서비스를 구성하는 파드 중 정상적으로 동작하는 파드에만 요청을 할당할 수 있다. 예제 애플리케이션에서 사용한 23_service_backend-app_k8s.yaml는 다음과 같다. apiVersion: v1 # 서비스 리소스가 따르는 버전이다. kind: Service # 이 yaml 파일이 서비스 파일이라는 것을 정의한다. metadata: name: backend-app-service # 서비.. 더보기
프로그래머스 - 연속 펄스 부분 수열의 합(Java) 두 가지 풀이법이 있습니다. 1. dp 방법입니다. 펄스는 짝수, 홀수에 따라 1 또는 -1이 반복됩니다. 주어지는 sequence에 펄스를 곱한 값의 최대를 dp에 저장시켜 값을 갱신하면 됩니다. 2. 누적합 방법입니다. 펄스를 곱한 값을 누적합하고, 누적합의 최대 위치가 연속된 부분 수열의 마지막 원소 위치가 됩니다. 예를 들어 펄스를 곱한 배열이 [8, -1, -7, -100, 55, 40, 13]있다고 하겠습니다. 여기서 최대 부분 수열은 [55, 40, 13]입니다. 배열을 누적합하면 [8, 7, 0, -100, -45, -5, 8] 입니다. 누접합의 가장 큰 원소가 8이고, 해당 배열에서 위치의 값은 13입니다. 13 위치에서 부터 뒤로 원소를 끝까지 확인하면서 최대 값을 구하면 됩니다. 단,.. 더보기
백준 - 5052 전화번호 목록(Java) https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가 www.acmicpc.net 트라이(Trie) 문제입니다. 트라이는 문자열 트리를 만들어서 문자가 존재하는지 확인할 수 있는 자료구조입니다. 트라이는 크게 두 가지의 메소드가 존재합니다. 삽입(insert) : 문자열을 넣어 트리로 만듦 검색(search) : 문자열을 검색 문자열 ["123", "124", "245", "1234"]를 트라이로 구현하면 다음 그림과 같습니다. 각 문자열을 삽입할 때, .. 더보기
백준 - 20166 문자열 지옥에 빠진 호석(Java) https://www.acmicpc.net/problem/20166 20166번: 문자열 지옥에 빠진 호석 K개의 줄에 걸쳐서, 신이 좋아하는 문자열을 만들 수 있는 경우의 수를 순서대로 출력한다. www.acmicpc.net 구현 문제입니다. 문제 구현 순서는 다음과 같습니다. 신이 좋아하는 문자열의 길이가 1~5이기 때문에, 격자에서 길이가 1~5인 문자열 모두를 만든다. 문자열을 만드는 탐색은 8방향으로 한다. 범위가 벗어나면 반대편으로 이동하게 조정한다. 문자열의 중복 개수를 map에 저장한다. 만들어진 문자들과 신이 좋아하는 문자와 비교해서 답을 도출한다. [구현 코드] import java.util.*; import java.io.*; public class Main { private stat.. 더보기
백준 - 5430 AC(Java) https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 구현 문제입니다. 문제 접근 순서는 다음과 같습니다. R이면 방향을 바꾼다. D이면 포인터를 옮겨 범위를 줄인다. 정방향일 경우 왼쪽의 포인터를 옮겨 범위를 줄인다. 역방향일 경우 오른쪽의 포인터를 옮겨 범위를 줄인다. Deque를 통해 문제를 해결할 수도 있겠지만, 배열을 사용해 처리 속도를 높였습니다. [구현 코드] import java.util.*; import java.io.*; public class Main { public static voi.. 더보기
프로그래머스 - 광물 캐기(Java) 구현 문제입니다. 문제 접근 순서는 다음과 같습니다. bfs로 곡괭이를 선택하는 모든 경우의 수를 구한다. 선택된 곡괭이로 광물을 앞에서 부터 5개 캔다. (피로도를 누적한다.) 사용된 곡괭이의 개수를 줄인다. 모든 광물 캐거나, 사용할 곡괭이가 없으면 해당 탐색을 종료한다. (최소 피로도를 갱신한다.) 피로도 계산은 곡괭이보다 단단한 광물을 캘 경우 그 단계에 따라 5의 제곱씩 증가됩니다. [구현 코드] import java.util.*; import java.util.function.Predicate; class Solution { public int solution(int[] picks, String[] minerals) { Queue mineralOrder = new LinkedList(); fo.. 더보기
백준 - 13460 구슬 탈출 2(Java) 구현 문제입니다. 구슬이 상, 하, 좌, 우로 움직였을 때 모든 경우를 bfs로 완전 탐색으로 해결했습니다. [구현 코드] import java.io.*; import java.util.*; public class Main { private static final String SEPARATOR = " "; private static int n, m; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(Syste.. 더보기
프로그래머스 - 당구 연습(Java) 구현 문제입니다. 이 문제를 해결하기 위해서는 한 가지 수학적 아이디어가 필요합니다. 입사각과 반사각이 같으면, 아래 그림과 같이 네 방향으로 대칭 이동을 할 수 있습니다. 즉, 공(ball)을 네 방향으로 대칭이동 시켜 최소 직선 거리를 구하면 됩니다. 주의해야할 점이 있습니다. 그림의 2번은 불가능합니다. 2번과 같이 파란색 공이 움직이면 벽보다 빨간색 공에 먼저 맞기 때문입니다. 때문에 두 공이 선 대칭 일 경우, 움직이는 공이 벽보다 다른 공에 먼저 맞는 경우를 제외해야 합니다. [구현 코드] import java.util.*; class Solution { public static int[] solution(int m, int n, int startX, int startY, int[][] bal.. 더보기