본문 바로가기

분류 전체보기

(125)
추석 트래픽 programmers.co.kr/learn/courses/30/lessons/17676 window[j].first) count++; } answer = max(answer, count); } 정답 코드 더보기 #include #include #include #include #include using namespace std; vector startv; vector window; int get_ms_dur(string& str) { int total = 0; int digit = 1000; for(int i = 0; i < str.size(); i++){ if('0'
1655 가운데를 말해요 www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 접근 방식이 헷갈려서 찾아본 문제이다. 우선, 문제의 조건부터 살펴보자. 가운데의 인덱스를 구하기 위해선 정렬이 어떤 형태로든, 무조건 되어 있어야 한다. 또한 시간 제한이 0.1초로 고정되어 있기 때문에, NlogN의 정렬을 사용하면 시간 초과가 발생한다. 따라서 다른 정렬 방식을 사용해야 한다. 고려해 볼 수 있는 자료구조로 우선순위 큐를 볼 수 있다. 우선순위 큐는 logN의 복잡도를 가지..
도커 컴포즈 이전에는 호스트 안에서 하나의 컨테이너만 실행했었다. 그런데, 여러 개의 컨테이너를 띄울 수 있는 상황도 생길 수 있다. 조금 더 구체적으로는 서버 애플리케이션 뿐만 아니라 DBMS, 캐시 등을 설정하는 컨테이너도 같이 띄워 관리할 수도 있다. 그런데 컨테이너들이 분산되면 몇 가지 문제가 생길 수 있는데, 대표적으로 일관성의 문제이다. 컨테이너마다 다르게 관리해주어야 하기 때문에 일관성이 깨질 수 있기 때문이다. 이럴 때 사용하는 것이 도커 컴포즈이다! 도커 컴포즈란? 여러 컨테이너를 쉽게 실행할 수 있도록 도와주는 도커 실행 툴이다. 앞서 컨테이너를 띄우려면 많은 옵션을 설정해야 한다. 도커 컴포즈에선 yaml 형식의 설정 파일을 이용하여 여러 개의 애플리케이션 서비스들을 효율적으로 관리할 수 있다. ..
20922 겹치는 건 싫어 www.acmicpc.net/problem/20922 20922번: 겹치는 건 싫어 홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열 www.acmicpc.net 투포인터라는 방법을 응용하면 쉽게 풀 수 있는 문제이다. 접근은 다음과 같다. 맵을 이용하여 중복을 체크한다. 1. 탐색의 처음 부분을 두 개의 포인터가 가리킨다. 2. 끝 부분의 포인터가 이동하면서 중복 개수가 K개를 초과하면, 시작 부분의 포인터를 다음으로 이동시키고 해당 값을 한 개 줄인다. 3. K개 이하가 될 때까지 2를 반복한다. 4. 배열의 길이 N까지 탐색을 마치면 종료한다. 고찰 : 놓쳤던..
도커의 작동 원리 이론과 실습 이번에 정리할 내용은 다음과 같다. 도커 컨테이너 vs 가상머신 도커 컨테이너 vs 프로세스 가상머신 운영체제 위에 하드웨어를 에뮬레이션하고, 그 위에 운영체제를 올리고 프로세스를 실행함 도커 컨테이너 하드웨어 에뮬레이션 없이 리눅스 커널을 공유하여 바로 프로세스를 실행함 어떻게 다른지 실습을 통해서도 알아보자. 컨테이너는 호스트 시스템의 커널을 사용한다. 컨테이너는 이미지에 따라서 실행되는 환경 (파일 시스템)이 달라진다. 여기서 궁금한 점은 어떻게 이미지에 따라 파일 시스템을 다르게 할 수 있는가이다. 운영체제 지식이 조금 들어가게 되는데, 리눅스는 루트 디렉토리를 기준으로 하위 디렉토리들을 찾는다. 그런데 도커에서는 이미지를 루트 파일 시스템으로 강제로 인식시켜 프로세스를 실행시키기 때문에 파일 시..
Java Collection Java에는 List, Map, Set 인터페이스를 기준으로 여러 구현체가 존재한다. C++에도 이와 비슷하게 Standard Template Library가 존재하는데, 사용자가 구현하지 않고 미리 만들어둔 구현체를 사용하여 자료구조를 사용할 수 있도록 한다. 대표적으로 몇 가지 알아보자. List List인터페이스를 직접 @Override를 통해 사용자가 정의하여 사용할 수 있고, 대표적인 구현체로 ArrayList가 존재한다. 이외에 LinkedList 등의 구현체가 있다. Map 대표적인 구현체로 HashMap이 존재한다. 그런데 멀티스레드 환경에서 문제가 있기 때문에 이를 위해 ConCurrentHashMap이 있다. Set 대표적인 구현체로 HashSet이 존재한다. Value에 대해 중복된 ..
MVC 패턴 주로 웹을 설계할 때 쓰이는 디자인 패턴 중에 하나인 MVC 패턴에 대해 알고있는 지식들을 정리한다. 먼저, 디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 쉽게 쓸 수 있는 형태로 만든 것을 말한다. MVC MVC란 Model, View, Controller의 약자로, 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세 가지의 역할로 구분한 패턴이다. Model : 모델은 어플리케이션이 모델이 무엇을 할 것인지를 정의한다. 내부 비지니스 로직을 처리하기 위한 역할을 합니다. (e.g.) 처리되는 알고리즘, DB와 상호작용 (CRUD), 데이터 등등.. Controller : 모델이 어떻게 처리할 ..
자바 빌더(Builder) 패턴 + lombok 자바에서 객체를 생성할 때 일반적으로 생성자를 이용한다. 그런데, 가만히 보면 프로그래머가 생성자의 순서를 외워서 인스턴스를 만들어야 한다. 그런데.. 몇 가지 문제점이 있다. 1. 타입이 같은 파라미터를 헷갈릴 수 있다. public Order(int id, int UUid, String orderDetail, String Order) //id, UUid .. 그 다음이 뭐였더라? { .... } Order 객체를 생성하기 위해 생성자에서 값을 넣는 도중 순서가 생각이 안난다면, 클래스를 직접 보거나 IDE에서 마우스를 갖다 대야 볼 수 있다. 2. 생성자의 파라미터가 많으면 다 넣어줘야 한다. public Order(int id, int UUID, String name, String OrderDeta..
Spring [IoC와 DI] 설명에 들어가기 앞서, 먼저 단어를 정리합니다. 객체 지향의 원리 중 OCP 원칙과 DIP원칙 OCP원칙이란? 개방-폐쇄 원칙, 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. DIP원칙이란? 의존 관계를 맺을 때, 변화하기 쉬운 것보다 변화하기 어려운 것에 의존하는 원칙. DIP를 만족하는 설계는 변화에 유연한 시스템이 된다. 요구사항 : 주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인 적용 (나중에 변경될 수 있음) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, ..
17472 다리 만들기 2 정답 코드를 보아도 이해가 안된 문제였다.. 접근의 핵심은 모든 섬을 연결했을 때의 최소 거리이며, 이 부분에서 MST가 생각나지 않았다. 처음 시도는 dfs로 모든 섬을 연결할 수 있는지 판단하면 어떨까 했는데 연결 부분에서 막혔다. 서론은 여기까지 하고 문제를 분석해보면 접근 방법은 다음과 같다. 1. 각각의 섬을 구분해주기 위해 BFS 혹은 DFS로 넘버링한다. 1.1 여기서 섬을 넘버링 해주는 이유는 뒤에 나올 크루스칼 알고리즘을 사용하기 위함이다. 2. 반복문으로 1인 칸마다 연결할 수 있는 다리를 각 방향마다 계산하여 벡터에 저장한다. 3. 2에서 구한 다리들을 가지고, 크루스칼 알고리즘을 수행한다. 3.1 수행하면서 다리를 놓을 때의 길이를 답에 더한다. 고찰 : 내가 생각하지 못했던 점은 ..