원지의 개발
728x90
article thumbnail
[코딩테스트] two pointer technique / 투 포인터 기법

two pointer technique배열이나 리스트와 같은 선형 구조에서 두 개의 점(포인터)를 이용하여 원하는 조건을 만족하는 부분 구조를 효율적으로 찾아내는 알고리즘 기법특정 합을 만족하는 두 수를 찾거나 부분 배열의 최소 길이를 찾는 문제 등에 활용같은 방향으로 이동보통 right 포인터가 먼저 조건을 만족할 때까지 이동하고 조건을 만족하는 상태에서 left 포인터를 이동시키면서 조건을 유지할 수 있는 최소, 최대 범위를 찾음연속된 부분 구조를 찾는 문제에 적용public static int solution(int[] arr, int x) { int count = 0; int sum = 0; int left = 0; int right = 0; while(left x) { sum -..

article thumbnail
[네트워크] HTTPS & SSL TLS, 혼합 콘텐츠
Study/Network 2023. 11. 1. 16:22

HTTPS HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것으로 HTTPS를 사용하는 웹사이트는 TLS 암호화를 이용 혼합 콘텐츠 경우에 따라 HTTPS 사이트에는 일반 텍스트 HTTP 프로토콜을 사용하여 로드되는 일부 요소도 포함될 수 있음 = 혼합 콘텐츠 조건 생 HTTPS를 통한 HTTP 콘텐츠가 혼합된 경우 HTTPS로 보호되는 사이트에 있으므로 안전하게 암호화된 채로 연결되어 있다고 생각하지만, 페이지의 암호회되지 않은 요소로 인해 취약점이 발생할 수 있음 심각도는 혼합 콘텐츠가 패시브(이미지, 동영상)인지 액티브(JavaScript 파일, API 요청)인지에 따라 달라짐 혼합 콘텐츠를 모두 차단하는 웹 브라우저는 사용자에게 매우 좁은 버전의 웹을 제공하는 것이므로 브라우저는 덜 심각한 형태..

article thumbnail
[네트워크] socket, 웹소켓
Study/Network 2023. 9. 14. 14:10

socket컴퓨터 사이에 네트워킹을 위한 통신 채널클라이언트 프로세스는 소켓을 통해 서버 프로세스와 데이터를 주고받을 수 있음전화와 같이 신뢰할 수 있는 양방향 통신을 제공프로세스 간의 통신에 사용되는 양쪽 끝단(endpoint)을 의미소켓은 TCP/IP 레이어(4계층)에서 작동하고, 웹 소켓은 HTTP 레이어(7계층)에서 작동함인터넷 프로토콜에 기반, 대부분의 네트워크 소켓은 인터넷 소켓임과정시스템을 구축할 때는 서버 프로세스를 위한 server socket 객체를 만듦서버 서비스가 원활하게 진행되면 클라이언트 프로세스를 만듦시스템 구축을 완료하면 고유한 IP 주소와 포트 번호를 가진 서버와여기에 접속한 클라이언트는 소켓을 통한 양방향 통신이 가능해짐2022.10.31 - [프로그래밍 언어/Java] ..

article thumbnail
[네트워크] 로드 밸런싱, 공인 IP & 사설 IP
Study/Network 2023. 9. 1. 03:20

로드 밸런싱 load balancing 쏟아지는 트래픽을 여러 대의 서버로 분산시켜주는 기술 네트워크 또는 서버에 가해지는 부하(Load)를 분산시켜 처리해주는 기법 가용성, 확장성, 보안 및 성능 향상 목적 또 다른 보안 계층을 추가할 수 있는 보안 기능이 내장 정적 라운드 로빈 방식 클라이언트로부터 받은 요청을 순서대로 할당하는 방식 로드 밸런싱 대상 서버의 성능이 동일하고 처리 시간이 짧은 애플리케이션의 경우 균등 분산 가중 기반 라운드 로빈 방식 우선 순위 또는 용량에 따라 각 서버에 서로 다른 가중치 할당 가중치가 높으면 더 많은 트래픽 수신 IP 해시 방식 클라이언트 IP 주소에 해싱을 수행하여 숫자로 변환한 다음 개별 서버에 매핑 사용자가 항상 동일한 서버로 연결되는 것을 보장 동적 최소 연..

article thumbnail
[Spring] 스프링 입문을 위한 자바 객체 지향의 원리와 이해
Study 2023. 7. 19. 13:39

배경 Assembly - 0과 1로 이루어진 기계어를 일상 용어로 만들기 위해 일대일로 매칭하는 코드표 기존에는 기계의 종류에 맞는 프로그램 소스 파일이 필요했는데, C언어의 등장으로 하나의 소스 파일(싱글 소스)만 가지면 알아서 컴파일러로 소스를 생성 인간 언어 체계와 기계어의 매칭이 1:1 → m:n 변환 CBD SOA 클래스 vs 객체 나이의 유무에 따라 구분 클래스 - 분류에 대한 개념 (실체x), 같은 속성과 기능을 가진 객체를 총칭하는 개념 객체(속성 + 기능) - 실체 = 클래스의 인스턴스 추상화: 모델링 구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합 하는 것 클래스 설계에서 추상화가 사용됨 Spring IoC/DI AOP PSA - 일관서 있는 서비스 추상화 자바와 절차적..

article thumbnail
[자료구조&알고리즘] 해시, 해시법(체인법, 오픈주소법)

해시데이터의 추가와 삭제를 효율적으로 수행할 수 있는 방법String 기반으로 정보를 기록하고 관리할 때 사용1. 전화번호부와 같음2. key가 String인 경우가 대부분3. put / get / getOrDefault해시법 (hashing)데이터를 저장할 위치(인덱스)를 간단한 연산으로 구현하는 것표에 정리한 값을 해시 값(hash value)이라고하며, 데이터에 접근할 때 사용해시 테이블의 요소 = 버킷인덱스012345678키 값56142029343751-해시 값56522716-해시값 = 각 요소의 값을 배열의 사이즈로 나눈 나머지 변경인덱스012345678키 값1-3729--145134-키 값2--20--56--더보기기존의 배열에 값을 추가하는 방법1. 이진검색법으로 삽입할 위치 조사2. 그 위치..

article thumbnail
[자료구조&알고리즘] 트리, 이진 트리, 이진 검색 트리

트리 비선형구조 그래프는 사이클이 있고, 트리는 사이클이 존재하지 않음 계층 관계를 나타내는 자료구조 트리는 저장위치를 찾아서 저장해야 하고, 삭제시 트리의 일부를 재구성해야하므로 링크드 리스트보다 추가/삭제 시간이 더 걸리는 대신 배열이나 링크드 리스트에 비해 검색과 정렬 기능이 더 뛰어남 용어 노드(node) 마디 A, B, C, D, E, F, G 간선(edge) 가지, 링크 루트(root) 트리의 가장 윗부분에 위치하는 노드 A 리프(leaf) 단말 노드(terminal node) 바깥 노드(external node) 트리의 가장 아랫부분(가장 마지막)에 위치하는 노드 D, E, F, G 간 노드(non-terminal node) 안쪽 노드 루트 포함, 리프가 아닌 노드 A, B, C 자식(chi..

article thumbnail
[자료구조&알고리즘] 리스트 (선형, 연결(포인터, 커서), 원형, 이중 연결)

리스트 - 데이터를 순서대로 나열해 놓은 자료구조 선형 리스트 배열로 선형 리스트 구현시 다음 노드 꺼내기 순서대로 데이터가 저장되어 있기 때문에 1만큼 큰 인덱스를 갖는 요소에 접근 노드의 삽입, 삭제 삽입, 삭제 시 다음의 모든 요소를 하나씩 뒤로 밀거나 앞으로 당겨야 함 선형 리스트 장점 1. 구조가 간단 2. 데이터를 읽어오는데 걸리는 시간이 가장 빠름 선형 리스트 단점 1. 쌓이는 데이터의 크기를 미리 알아야 함 2. 밀거나 당겨야 하기 때문에 효율이 좋지 않음 연결 리스트 - 포인터 연속된 노드의 결정체 자신과 같은 자료형의 인스턴스를 가리킴, 자기 참조(self-referential)형 클래스형 변수인 data는 데이터 그 자체가아니라 데이터에 대한 참조 꼬리 노드의 뒤쪽 포인터 값을 nul..

article thumbnail
[자료구조&알고리즘] 셸, 퀵, 병합, 힙, 도수(계수) 정렬

셸 정렬 단순 삽입 정렬의 장점은 살리고, 단점을 보완하여 좀 더 빠르게 정렬 장점: 정렬을 마쳤거나 마친 상태에 가까우면 속도가 빨라짐 단점: 삽입할 위치가 멀리 떨어져 있으면 이동해야 하는 횟수가 많아짐 정렬할 배열의 요소를 그룹으로 나눠 각 그룹별로 단순 삽입 정렬 수행 ▶ 그룹을 합치면서 정렬 반복(이동 횟수 줄임) i = 8일 때 j = 4-4 = 0인데 조건으로 j >= 0이 가능하게 만들어줌으로써 구간이 [4] ~ [12]까지로 바뀌고 계속 반복 실행 static void shellSort(int[] a, int n) { //n = 배열의 길이 for(int term = n/2; term > 0; term /= 2) { //{8, 1, 4, 2, 7, 6, 3, 5} 일 때 h = 8, 4,..

article thumbnail
[자료구조&알고리즘] 재귀 알고리즘(팩토리얼, 유클리드 호제법), 하노이의 탑, N퀸 문제 ???

재귀 어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적(recursive)이라고 함 이게 안되면 디바이드 앤 컨커, 다이나믹 프로그래밍 다 안됨 재귀호출: 자기 자신과 똑같은 메서드를 호출 선언적 프로그래밍(declarative programming) = 목적만 설정해 주면 중간 과정은 컴퓨터가 알아서 함 : 언제 종료하고, 이 문제를 어떤 식으로 정의 할 수 있는가 명시 직접(direct) 재귀: 자신과 같은 메서드 호출 간접(indirect) 재귀: 메서드 a가 메서드 b를 호출, 다시 메서드 b가 메서드 a를 호출 재귀함수를 짜는 법 1. 종료 조건 2. 문제의 정의 팩토리얼 음이 아닌 정수의 팩토리얼 1. 0! = 1 2. n > 0 이면 n! = n * (n-1)! ..

article thumbnail
[자료구조&알고리즘] stack(스택), queue(큐)

스택 (stack)데이터를 일시적으로 저장하기 위한 자료구조후입선출, LIFO(Last In First Out)메서드를 호출하고 실행할 때 프로그램 내부에서 스택 사용arr[0] = bottomarr[n-1] = top스택 만들기필드 & 생성자package chap04_1;public class IntStack { private int max; //스택 용량, 배열 길이 private int ptr; //스택 포인터, 현재 쌓여 있는 데이터의 수(인덱스가 아님) private int[] stk; //스택 본체 //실제로는 본체를 참조하는 배열 변수로 배열 본체는 생성자에서 생성함 //실행 시 예외: stack이 비어있음 public class EmptyIntStackException extends R..

[알고리즘] 유클리드 호제법 (Euclidean algorithm), 약수, 배수

유클리드 호제법 (Euclidean algorithm)두 개의 수가 있을 때, 최대공약수를 구하는 알고리즘소인수분해를 하면 효율적이지 않고, 두 수가 크면 시간 복잡도는 계속 증가하므로 유클리드 호제법 알고리즘을 사용하면 문제를 쉽게 해결 가능함GCD(a, b) = GCD(b, r)r : a mod b (a에서 b를 나눈 나머지)조건: 0 ≤ r a, b 를 서로 나눌 때, r=0 이 되면 그 때 b가 최대공약수나머지가 0이 되는 시점까지 계속해서 동일한 연산을 진행해야 하는데 몇번을 통해서 가능한지 알 수 없기 때문에 재귀형태로 구현해야 함최대공약수 GCDGreat Common Divisor: 가장 큰 공통된 약수1. 반복문int GCD(int a, int b) { while(b != 0) { ..

728x90
250x250