전체 글

전체 글

    [디자인 패턴] 싱글톤 패턴 (Creational)

    싱글톤(Singleton)전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하고, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.  주의사항객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다.-> private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다.다중 스레드에서 경합 조건(Race Condition)이 발생해 인스턴스가 2개 이상 생성되는 경우를 막아야 한다.  아래 코드는 위 주의사항을 잘 지킨 예시이다.public class SingletonService { private static final SingletonService instance = new Singleto..

    [K8S] 컨테이너 이해하기

    [K8S] 컨테이너 이해하기

    컨테이너 인프라 환경이란 리눅스 운영 체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경을 말한다. 컨테이너 하나 이상의 목적을 위해 독립적으로 작동하는 프로세스이다. 개인 환경(개인 PC)에서는 1명의 관리자(사용자)가 다양한 프로그램을 사용하므로 각각의 프로그램을 컨테이너로 구현할 필요가 없다. 하지만 기업 환경에서는 다수의 관리자가 수백, 수천대의 서버를 함께 관리하기 때문에 일관성을 유지하는 것이 매우 중요하다. 여러 사람이 만져서 설정의 일관성이 떨어진 서버를 SnowFlake Server(눈송이 서버)라고 한다. 이런 경우에 컨테이너 인프라 환경을 구성하면 효과적이다. 또한 가상화 환경에서는 각각의 가상 머신이 모두 독립적인 운영체제 커널을 가지고 있어야 하기 때문에..

    [백준 1280] 나무심기 (C++)

    [백준 1280] 나무심기 (C++)

    1280번: 나무 심기 첫째 줄에 나무의 개수 N (2 ≤ N ≤ 200,000)이 주어진다. 둘째 줄부터 N개의 줄에 1번 나무의 좌표부터 차례대로 주어진다. 각각의 좌표는 200,000보다 작은 자연수 또는 0이다. www.acmicpc.net 세그먼트 트리를 응용하는 문제 tree 배열은 나무를 심을 수 있는 좌표의 구간(0 ~ 200000)을 node번호로 하는 세그먼트 트리이다. 0 ~ 200000 : 1번 노드, 0 ~ 100000 : 2번 노드, 100001 ~ 200000 : 3번노드 ...... 각 구간에 속하는 나무의 개수가 tree[node].first에 저장된다. 각 구간의 나무 위치의 합이 tree[node].second에 저장된다. 이 정보들이 왜 필요한가?? 새로운 나무를 심을..

    [백준 3020] 개똥벌레 (C++)

    [백준 3020] 개똥벌레 (C++)

    3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net 풀이를 떠올리기 어려운 문제였다. top 배열과 bottom 배열의 의미 처음 input함수에서 종유석과 석순의 높이를 입력 받으며, 해당 구간에서 길이가 끝나는 종유석, 석순의 개수를 카운팅해준다. 높이가 7일 때, ex) 석순 3이 입력되면 3번 구간의 장애물이 하나 생겼음을 알 수 있다. ex) 종유석 5가 입력되면 3번 구간의 장애물이 하나 생겼음을 알 수 있다. (7 - 5 + 1) 입력이 끝나면 모든 구간에 있는 장애물의 개수를 누적합으로 계산해 준다. ..

    [백준 1649] 택시 (C++)

    1649번: 택시 첫 번째 줄에 교차로의 개수인 N(1 ≤ N ≤ 1,000)과 도로의 개수 M이 주어진다. 그 다음 M개에 줄에는 도로의 정보를 알려주는 시작점과 끝점이 주어진다. 다음 줄에는 시작점 A와 끝점 B, 그리고 방 www.acmicpc.net 조건 N개의 노드가 존재하고 노드들은 서로 단방향으로 연결되어 있다. A라는 노드에서 출발해 다시 A노드로 돌아올 수 없다. U -> V 연결이 있다면 V -> U 연결은 있을 수 없다. A에서 B로 가야 한다. 가는 도중에 C1, C2 ... Cn 노드를 거쳐가야 한다. 이때 중간 노드의 방문 순서는 중요하지 않다. 요구사항 A에서 B로 가기 위한 경로의 수를 출력하라. A에서 B로 가는 모든 경로를 탐색해보는 top-down DP로 풀려다가 도저히..

    [컴퓨터 구조] 캐시 메모리

    [컴퓨터 구조] 캐시 메모리

    캐시 메모리 CPU와 주기억장치의 속도차이를 보완하기 위하여 그 사이에 설치하는 반도체 기억장치. 용어 정리 CPU가 원하는 데이터가 이미 캐시에 적재되어 있는 상태를 캐시 적중(cache hit)이라고 한다. 반대로, CPU가 원하는 데이터가 캐시에 없는 상태를 캐시 미스(cahce miss)라고 한다. 기억장체 엑세스들 중에서 캐시에 적중되는 비율을 나타내는 캐시 적중률(cache hit ratio) H는 다음과 같다. $$ H = \frac{캐시에 적중되는 횟수}{전체 기억장치 액세스 횟수} $$ 캐시 적중률은 CPU가 원하는 데이터가 캐시에 있을 확률이라고 말할 수 있다. 따라서 캐시에 없을 확률인 미스율은 1-H가 된다. 캐시아 사용되는 시스템에서 평균 기억장치 액세스 시간 Ta는 다음 식을 이..

    [컴퓨터 구조] 기억장치 모듈 설계

    [컴퓨터 구조] 기억장치 모듈 설계

    칩의 각 기억장소에 저장되는 비트 수가 일반적으로 컴퓨터의 단어 길이보다 적기 때문에, 한 번에 한 단어씩 엑세스할 수 있도록 하기 위해서는 여러 개의 칩들을 병렬로 접속해야 한다. 컴퓨터의 단어 길이가 N비트이고 기억장치 칩의 데이터 입출력 비트 수가 B개라고 가정하자. 한 번에 한 단어씩의 데이터 엑세스가 가능하도록 하기 위해서는 N/B개의 칩들로부터 동시에 B비트씩 엑세스 할 수 있어야 한다. 그렇게 하기 위해 기억장치 칩들을 병렬로 접속하는 방법을 알아보자. 병렬 접속 16x8bit RAM 16x4bit RAM 칩의 구성이다. 칩 2개를 병렬로 접속하여 한 번에 8비트씩 읽기/쓰기가 가능하도록 설계했다. 병렬접속을 위해서 모든 주소비트들(A0 ~ A3)을 두 칩에 공통적으로 인가하며, 칩 선택(C..

    MSA(MicroService Architecture)에 대한 내 생각 한 줌

    백엔드 개발에 관심이 있다면 한 번쯤은 들어봤을 MSA 백엔드에 대해서 공부할수록 느껴지는 게 있다. 프레임워크를 능숙히 사용하고, 코드를 우아하게 짜고, 새로운 신기술을 사용하는 것.. 모두 정말 중요하다고 생각한다. 나는 스프링, 장고 같은 프레임워크를 깊이 이해해서 요구사항을 빠르고 쉽게 해결하고 싶다. 불필요한 중복을 최소화하면서 객체지향적인 코드를 짜고 싶다. 새로운 신기술을 도입해서 기술적 역량을 확장시키고 싶다. 근데 위 3가지를 연습하면서도 최종적으로 바라봐야 할 '숲' 같은 존재는 인프라/아키텍쳐 부분이라고 생각한다. 같은 프로젝트를 수행하더라도 더 확장하기 쉽고, 변경이 쉬운 구조를 설계하는 사람이 되고 싶다. 그런 설계 방식 중 하나가 마이크로 서비스 아키텍처이다. 한 단계 더 깊이 ..

    [백준 1039] 교환 (C++)

    1039번: 교환 첫째 줄에 정수 N과 K가 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, K는 10보다 작거나 같은 자연수이다. www.acmicpc.net N이 100만보다 작다는 조건 덕분에 문제를 해결할 수 있었다. 최대 10번의 교환을 수행할 수 있기 때문에, 몇 번째 교환일 때 어떤 수가 나왔는지 확인한다면 모든 경우의 수를 확인해서 최솟값을 찾을 수 있다. -> check[1000001][11] 처음 숫자가 한자릿수라면 교환이 불가능하기 때문에 -1을 출력한다. 처음 숫자가 두자릿수일 때 일의 자리가 0이라면 교환이 불가능하기 때문에 -1을 출력한다. dp를 수행하면서 교환한 수가 0으로 시작할 때는 넘긴다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1..

    [백준 1368] 물대기 (C++)

    1368번: 물대기 첫 줄에는 논의 수 N(1 ≤ N ≤ 300)이 주어진다. 다음 N개의 줄에는 i번째 논에 우물을 팔 때 드는 비용 Wi(1 ≤ Wi ≤ 100,000)가 순서대로 들어온다. 다음 N개의 줄에 대해서는 각 줄에 N개의 수가 들어 www.acmicpc.net 모든 논을 최소 비용으로 연결시키는 문제이다. 따라서 최소 스패닝 트리라고 생각할 수 있다. 문제의 핵심은 이미 물이 있는 논을 통해서만 물을 댈 수 있다는 것이다. 그래서 어렵게 생각한다면 우물을 파는데 가장 비용이 적은 논을 구하고.. 그 논을 통해서 가장 비용이 적은 간선을 선택하고.. 등등 케이스가 복잡한 상황이 정말 많이 생길 것이다 다익스트라에서 주로 사용했었던 방식인데 가상 노드를 하나 설정한다. 가상 노드는 논들과 연..