1. 문제정의 전산학에서 트리 순회(Tree traversal)는 트리 구조에서 각각의 노드를 정확히 한 번만, 체계적인 방법으로 방문하는 과정을 말한다. 이는 노드를 방문하는 순서에 따라 분류된다. 여기서 설명하는 알고리즘은 이진 트리에 대해서 작성되었지만, 다른 모든 트리에서도 일반화될 수 있다. 2. 문제 설계 연결 리스트와 1차원 배열과 같은 선형 자료 구조에서는 한 가지의 논리적인 순회 방법만이 존재하지만, 트리 구조의 순회에는 많은 방법이 존재한다. 이진 트리의 루트 노드에서 시작해서, 세 가지 주요 단계를 거치며 순회를 진행하는데, 그 단계에는 현재 노드를 방문하는 것, 왼쪽 자식 노드를 순회하는 것과 오른쪽 자식 노드를 순회하는 것이 있다. 이러한 과정은 재귀로 쉽게 설명할 수 있다. 전위..
롤링 업그레이드 롤링 업그레이드란 Elasticsearch 클러스터에서 한 노드씩 업그레이드하는 것으로, 서비스 중단없이 업그레이드를 할 수 있습니다. 롤링 업그레이드 준비 1. 더 이상 제공하지 않는 기능을 사용하고 있는지 확인해야한다. 2. 주요 변경 사항을 검토한다. 3. 프로그인을 사용하는 경우 업그레이드하는 버전과 호환되는 각 플러그인의 버전이 있는지 확인해야한다. 4. 업그레이드하기 전에 테스트서버에서 테스트해야한다. 5. 스냅 샷을 찍어 데이터를 백업하고 작업 진행해야한다. 업그레이드 1. 샤드 할당을 비활성화합니다. 노르를 종료하였을때 해당 노드의 샤드를 다른 노드로 복제하는 것을 방지 PUT _cluster/settings { "persistent": { "cluster.routing.a..
1. 문제정의 LCS란 Longest Common Subsequence의 약자로 최장 공통 부분 문자열이다. 우리가 알고 있는 substring과 비교하면 substring은 연속된 부분 문자열이고 subsequence는 연속적이지는 않은 부분 문자열이다. 예로 들어 Iamhungry라는 문자열에서 연속된 부분 문자열인 mhun은 substring이 되고 연속적으로 이어지지는 않았지만 순서는 맞는 mugy는 subsequence가 된다. 그러면 LCS는 어디에 쓰일까? 대표적으로 LCS가 쓰이는 곳은 염기서열 유사성 분석이다. 이외에도 음파 단어 검색 및 교정 등에 사용된다. 2. 문제 설계 Dynamic Programming기법으로 문제를 해결하여 두 문자열 크기에 해당하는 2차원 배열의 값을 채우므로..
1. 문제정의 대량의 좌표 데이터를 메모리 안에 압축해 저장하기 위해 사용하는 여러 기법 중 쿼드 트리(quad tree)란 것이 있습니다. 주어진 공간을 항상 4개로 분할해 재귀적으로 표현하기 때문에 쿼드 트리라는 이름이 붙었는데, 이의 유명한 사용처 중 하나는 검은 색과 흰 색밖에 없는 흑백 그림을 압축해 표현하는 것입니다. 쿼드 트리는 2N × 2N 크기의 흑백 그림을 다음과 같은 과정을 거쳐 문자열로 압축합니다. 이 그림의 모든 픽셀이 검은 색일 경우 이 그림의 쿼드 트리 압축 결과는 그림의 크기에 관계없이 b가 됩니다. 이 그림의 모든 픽셀이 흰 색일 경우 이 그림의 쿼드 트리 압축 결과는 그림의 크기에 관계없이 w가 됩니다. 모든 픽셀이 같은 색이 아니라면, 쿼드 트리는 이 그림을 가로 세로로..
1. 문제정의 너비가 같은 N개의 나무 판자를 붙여 세운 울타리가 있습니다. 시간이 지남에 따라 판자들이 부러지거나 망가져 높이가 다 달라진 관계로 울타리를 통째로 교체하기로 했습니다. 이 때 버리는 울타리의 일부를 직사각형으로 잘라내 재활용하고 싶습니다. 그림 (b)는 (a)의 울타리에서 잘라낼 수 있는 많은 직사각형 중 가장 넓은 직사각형을 보여줍니다. 울타리를 구성하는 각 판자의 높이가 주어질 때, 잘라낼 수 있는 직사각형의 최대 크기를 계산하는 프로그램을 작성하세요. 단 (c)처럼 직사각형을 비스듬히 잘라낼 수는 없습니다. 판자의 너비는 모두 1이라고 가정합니다. 입력 첫 줄에 테스트 케이스의 개수 C (C≤50)가 주어집니다. 각 테스트 케이스의 첫 줄에는 판자의 수 N (1≤N≤20000)이 ..
알고리듬을 평가하는 두가지 기준 1. 시간 : 알고리듬의 수행 속도의 특성을 분석 2. 공간 : 알고리듬의 메모리 사용 특성을 분석 -> 시간이 빠르면서 메모리도 더 적게 사용하는 알고리듬이 이상(理想)! BUT! 두 기준은 서로 상충하는 경우가 많다. 즉, 메모리 사용량을 희생해 속도를 높이거나, 속도를 희생해서 메모리 사용량을 줄여인 알고리듬들을 훨씬 자주 볼 것이다. 시간복잡도 분석(Time complexity) 알고리듬의 수행 속도를 측정하는 방법 1. 프로그램의 수행 시간을 측정(Timer) -> 가장 직관적인 방법이지만 하드웨어, 사용 언어, 운영체제 등 외부 요소가 시간에 영향을 미치므로 부적합! 2. 수행 시간 기준 기본적인 연산의 수 비교 (ex. 사칙연산, 대소비교, 대입연산) -> 가..
알고리듬? 어떠한 문제를 해결하기 위한 일련의 절차를 공식화한 형태로 표현한 것 ※ 좋은 알고리듬은 아래 특징을 따른다. 정밀성 : 변하지 않는 명확한 작업 단계를 가져야 한다. 유일성 : 각 단계마다 명확한 다음 단계를 가져야 한다. 타당성 : 구현할 수 있고 실용적이어야 한다. 입력 : 정의된 입력을 받아들일 수 있어야 한다. 출력 : 답으로 출력을 내보낼 수 있어야 한다. 유한성 : 특정 수의 작업 이후에 정지해야 한다. 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 한다. 알고리듬 구현 방식? 자연어, 의사코드, 순서도, 프로그래밍 언어로 다양 알고리듬 개발의 정형적인 단계 문제 정의 → 모델 고안 → 명세 작성 → 설계 → 검증 → 분석 (복잡도 등) → 구현 → 테스트 → 문서화 즉,..
1. 자바 설치 #openjdk 1.8 다운로드 cd /install_files/ tar zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz mv java-se-8u41-ri /usr/bin/ cd /usr/bin ln -s /usr/bin/java-se-8u41-ri java sudo vi /etc/profile #환경변수 설정 export JAVA_HOME=/usr/bin/java export PATH=$JAVA_HOME/bin:$PATH #버전 확인 java -version 2. 카프카 설치 #설치파일 다운로드 cd /install_files/ wget https://downloads.apache.org/kafka/2.7.0/kafka_2.13-2.7.0.tg..