분류 전체보기 258

발행-구독 패턴

발행(publisher) 구독(subscriber) 패턴은 옵저버(Observer) 패턴과 유사한 부분이 많다. 발행-구독 패턴이 무엇인지, 옵저버 패턴과 어떤 차이가 있는지 살펴보자. 발행구독 패턴 발행자와 구독자가 있고 그 사이에 브로커(=메시지 큐)가 존재하는 형태이다. 이것의 특징을 나열하면 아래와 같다. 1. 발행자 메시지의 수신자가 정해져 있지 않다. 2. 메시지는 정해진 범주에 따라서 구독을 신청한 수신자에게 전달이 된다. 3. 수신자는 발행자에 대한 정보 없이 원하는 메시지를 수신할 수 있다. 4. 메시지큐 패러다임과 마치 형제같은 관계로 대형 메시지 지향 미들웨어 솔루션의 일부라고 한다. 발행자(=pub)와 구독자(=sub) 은 아래와 같은 특징을 가진다. 1. pub 이 sub 의 선언..

디자인 패턴 2022.04.30

JDK, JRE, JVM 이해하기

JVM (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드 (.class file) 를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 벤더가 구현한 JVM)이다. JVM 벤더: 오라클, 아마존 등 특정 플랫폼에 종속적이다. .java 파일을 컴파일하면 .class 파일이 생성되는데 해당 파일은 바이트 코드로 이루어져 있다. 이후 바이트 코드(.class 파일)를 인터프리터와 JIT 컴파일러를 사용하여 해당 OS에 맞는 기계어로 변경한 후 실행되게 된다. (OS에 의존적이기 때문에 특정 플랫폼에 종속적인 것이다.) 이 외에도 JVM 은 메모리 관리의 역할도 가지고 있다. 여러 밴더에 따라 ..

[leetcode] 27. Remove Element

Description 정수 배열과 특정 값이 주어졌을때, 배열 안에 특정 값이 있다면 모두 제거하는 문제 Input: arr = [3, 2, 2, 3], val = 3 Output: [2, 2, _, _] Input: arr = [0, 1, 2, 2, 3, 0, 4, 2], val = 2 Output: [0, 1, 4, 0, 3, _, _, _] Success 두 개의 포인터 변수를 이용하여 인덱스를 순회하고 특정 값이 아닌 값들을 앞에 배치시킨다. class Solution { public int removeElement(int[] nums, int val) { if (nums == null) return -1; int j=0; for (int i=0; i

알고리즘 2021.11.22

[leetcode] 905. Sort Array By Parity

Description 정수 배열이 주어졌을때, 짝수인 요소를 앞으로 이동시켜라 Input: arr = [3, 1, 2, 4] Output: [2, 4, 3, 1] Input: arr = [0] Output: [0] Success 두 개의 포인터 변수를 둔다. 인덱스를 돌며 짝수인 값을 앞으로 이동시킨다. 이동이 된 후에는 그 다음 인덱스를 가리킬 수 있도록 j 값을 1씩 증가시킨다. class Solution { public int[] sortArrayByParity(int[] nums) { int j=0; for (int i=0; i

알고리즘 2021.11.22

[leetcode] 283. Move Zeroes

Description 정수 배열이 주어졌을때, 0이 아닌 요소를 앞으로 이동시키고 배열의 모든 0 은 끝으로 이동시킨다. Input: arr = [0, 1, 0, 3, 12] Output: [1, 3, 12, 0 ,0] Input: arr = [0] Output: [0] fail 두 개의 포인터 변수를 둔다. 0이 아닌 값들을 찾을 변수 i 와 앞에서부터 변경되어야 할 인덱스를 가르키는 변수 j를 두어 계속해서 0이 아닌 값들을 앞으로 이동시킨다. 결국 0인 값들은 뒤로 이동되고, 0이 아닌값들은 앞으로 이동된다. class Solution { public void moveZeroes(int[] nums) { int j = 0; for(int i = 0; i < nums.length; i++) { if(..

알고리즘 2021.11.19

[leetcode] 26. Remove Duplicates from Sorted Array

Description 내림차순 정수 배열이 주어졌을때, 해당 배열에서 중복을 모두 제거 한 후 배열의 길이를 출력하는 문제 Input: arr = [1, 1, 2] Output: [1, 2, _] Input: arr = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] Output: [0, 1, 2, 3, 4, _, _, _, _, _] Success 두개의 변수를 사용하여 각각 다른 인덱스를 바라보게 한다. 두 변수가 가르키고 있는 인덱스의 값이 다르면 특정 변수가 가르키고 있는 인덱스에 값을 할당하여 중복이 제거될 수 있도록 한다. class Solution { public int removeDuplicates(int[] nums) { int j= 0; for(int i=1; i

알고리즘 2021.11.16

[leetcode] Replace Elements with Greatest Element on Right Side

Description 정수 배열이 주어졌을때, 특정 인덱스를 순회하여 자신보다 큰 값이 나오면 특정 인덱스부터 큰 값의 인덱스 사이의 값들을 모두 큰 값으로 바꿔주는 문제. 단, 마지막 원소는 항상 -1 값을 넣어주어야 한다. Input: arr = [17, 18, 5, 4, 6, 1] Output: [18, 6, 6, 6, 1, -1] Input: arr = [400] Output: [-1] Success 배열 뒤에서 부터 순회하며 현재 값이 앞에 있는 값들보다 큰 경우 모두 현재 값으로 바꿔준다. 배열 원소가 하나남았을때 다시 반대로 순회하며 배열을 한칸씩 앞으로 채워 -1 값이 들어갈 자리를 만들어준다. class Solution { public int[] replaceElements(int[] a..

알고리즘 2021.11.13

[leetcode] 941. Valid Mountain Array

Description 정수 배열이 주어졌을때 , 산(mountain) 의 형태로 된 정렬이라면 true 를 반환하는 문제 (오름차순 -> 내림차순) Input: arr = [2, 1] Output: false Input: arr = [3, 5, 5] Output: false Input: arr = [0, 3, 2, 1] Output: true Success 배열의 원소는 최소 2개 이상이여야 하고 최초 시작은 무조건 오름차순으로 가야하기 때문에 [0] 번째 원소가 [1] 번째 원소보다 크면 안된다. 첫번째 while 문을 통해 이전 인덱스가 현재 인덱스 보다 클 때까지 계속 반복한다. 만약, 이전 인덱스가 현재 인덱스보다 크다면 종료 후 다음 while 문으로 이동하여 현재 인덱스부터 계속 값이 작은지를..

알고리즘 2021.11.12

[leetcode] Check If N and Its Double Exist

Description 정수 배열이 주어지면 특정 원소 i 를 하나 선택하여 i x 2 를 하였을 때 해당 값이 배열 안에 포함되어 있는지를 찾는 문제 Input: arr = [10, 2, 5, 3] Output: true Input: arr = [7, 1, 14, 11] Output: true Success 이중 for 문을 통하여 순차적으로 특정 값에 2배를 한 후 해당 결과가 배열안에 있는지 탐색한다. class Solution { public boolean checkIfExist(int[] arr) { if (arr == null && arr.length == 0) return false; for(int i=0; i

알고리즘 2021.11.12

[leetcode] 26. Remove Duplicates from Sorted Array

Description 내림차순으로 정렬된 배열이 주어졌을때 배열 안에 중복된 값들을 제거하는 문제. 단, 새로운 배열 추가 없이 기존 배열에서 중복이 제거되어야 한다. Input: nums = [1,1,2] Output: 2, nums = [1,2,_] Input: nums = [0,0,1,1,1,2,2,3,3,4] Output: 5, nums = [0,1,2,3,4,_,_,_,_,_] Success cnt 라는 변수를 하나 두고 for문이 적용된 i 변수의 인덱스의 값과 cnt 변수의 인덱스 값을 비교하여 다른 경우에만 앞에서부터 새롭게 할당시킨다. class Solution { public int removeDuplicates(int[] nums) { if (nums == null) return -1..

카테고리 없음 2021.11.10