본문 바로가기

전체 글

프로그래머스 - 요격 시스템(Java) 그리디 문제입니다. 문제를 요약하면 다음과 같습니다. 여러 개의 직선이 주어질 때, 모든 선을 지나도록 하는 최소 직선의 개수를 구하라 문제에서 주어지는 예제는 다음과 같습니다. 주어지는 직선은 주황색 직선입니다. 이 모든 주황색 직선을 지나도록하는 선은 위 그림과 같이 최소 세 개가 필요합니다. 어디선가 많이 보던 내용 아닌가요? 네, 스케쥴링 문제와 매우 유사합니다. 스케쥴링 문제와 비슷하게 끝나는 시간을 기준으로 오름차순을 하고, 반복을 하면서 시점과 종점을 비교하면 됩니다. 이와 비슷한 문제로 백준의 회의실 배정 문제가 있습니다. 스케쥴링을 연습하실 분은 아래 링크를 통해 가셔서 풀어보시길 바랍니다. https://www.acmicpc.net/problem/1931 [구현 코드] import ja.. 더보기
백준 - 11501 주식(Java) 그리디 문제입니다. 문제 조건에 의해 각 주식들은 가장 비싼 날에 팔아야 합니다. 즉, 가격으로 내림차순으로 정렬하여 비싼 주식의 이전 주식들을 계산해서 팔면 됩니다. [구현 코드] import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer stz; int tes.. 더보기
프로그래머스 - 연속된 부분 수열의 합(Java) 투포인터 문제입니다. 투포인터란, 두 가지의 포인터를 사용해 배열에서 조건과 일치하는 연속된 부분을 찾을 수 있는 방법입니다. 조건에 맞춰 서로 다른 두 가지의 포인터를 움직여야 합니다. 입출력 예제 1번을 보도록 하겠습니다. 우선 left, right 라는 이름의 두 가지의 포인터를 배열 0번째 위치에 둡니다. left와 right 사이가 부분 수열이 되는 것입니다. 현재 left와 right의 부분 수열의 합은 1입니다. 현재 부분 수열의 합이 k보다 작기 때문에 right를 움직입니다. (k = 7) 부분 수열이 [0, 1]가 되었습니다. 새로운 원소가 추가되었습니다. 기존의 부분 수열의 합에서 새로운 원소인 2를 더합니다. 그 합은 3입니다. 아직도 k보다 작기 때문에 right를 움직입니다. 부.. 더보기
프로그래머스 - 혼자 놀기의 달인(Java) 파인드(find) 문제입니다. 문제를 요약하면 '같은 집합을 이루는 배열의 원소 개수를 찾아 가장 큰 두 개를 곱하라' 입니다. 입력의 각 원소는 자신과 같은 집합을 이루는 위치를 가르키고 있습니다. 즉, 이미 유니온(union)이 되어있는 집합이 입력으로 주어지는 것입니다. 각 위치에서 find연산을 통해 어느 집합에 속하는지 파악하면 끝나는 문제입니다. 단, 주의해햐할 점이 있습니다. 입력으로 주어지는 배열은 순환을 발생시킬 수 있기 때문에 이미 방문한 곳은 재방문하지 않도록 하면 됩니다. find 연산을 할 때, 최상위 부모를 저장시켜 방문한 곳은 값을 확인하면 됩니다. [구현 코드] import java.util.*; class Solution { int[] parents; public int s.. 더보기
3. 쿠버네티스에서 애플리케이션을 동작시키는 구조 - 4 3.4 설정 정보 등을 안전하게 저장하는 구조 3.4.1 환경 변숫값 전달 모던 애플리케이션을 개발하기 위한 방법론으로 The Twelve-Factor App이 있다. 그 중에 ‘애플리케이션 설정 정보는 환경 병수에 저장한다.’ 라는 정의가 있다. 이러한 정의를 두는 이유는 개발 환경, 스테이징 환경, 서비스 환경 등에서 취급하는 설정 정보가 달라 다시 빌드하는 일이 없도록 하기 위함이다. 쿠버테이스에서는 이와 같은 설정 정보를 파드의 환경 변수로 안전하게 전달하는 구조가 있다. The Twelve-Factor App The Twelve-Factor App Background The contributors to this document have been directly involved in the dev.. 더보기
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"]를 트라이로 구현하면 다음 그림과 같습니다. 각 문자열을 삽입할 때, .. 더보기