일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 자바 스레드 실행 순서 제어
- 사칙연산
- array
- scanner
- hash table
- Kadane's Algorithm
- 자바입력
- 수학
- heroku
- JAVA11
- 카데인 알고리즘
- 자바 thread 실행 순서 제어
- SpringBoot 2
- Easy
- input
- R
- Today
- Total
목록분류 전체보기 (192)
DeFacto-Standard IT
Donald L. Shell 이라는 사람이 제안한 방법이다. 삽입 정렬이 어느 정도 정렬된 배열에 대해서는 아주 빠르다는 것에 착안하여 고안한 방법이다. 셸 정렬은 삽입정렬의 보다 빠르다. 삽입 정렬의 최대 문제점은 요소들이 삽입될 때, 이웃한 위치로만 이동하는 것이다. 만약, 삽입되어야 할 위치가 현재 위치에서 상당히 멀리 떨어진 곳이라면 많은 이동을 해야한다. 셸 정렬은 요소들이 멀리 떨어진 위치로도 이동이 가능하다. 삽입 정렬은 전체의 리스트를 한 번에 정렬하는데 비해, 셸 정렬은 그렇지않다. 1. 정렬할 리스트를 일정기준에 따라 분류하여 연속적이지 않은 여러 개의 부분리스트를 만든다. 2. 모든 부분 리스트를 삽입 정렬을 이용하여 정렬 3. 모든 부분 리스트가 정렬되면 다시 전체 리스트를 더 적은..
버블 정렬은 오름차순 기준으로, 인접한 2개의 레코드를 비교하여 정렬되어 있지 않다면 서로 교환하는 비교-교환 과정을 처음부터 끝까지 비교한다. 한 회전에서 2개의 레코드를 계속 비교하기 때문에 각 회전마다 그 리스트의 가장 큰 숫자는 항상 제자리(맨 뒤쪽)로 찾아간다. 1. 리스트의 첫 번째, 두 번째 숫자를 선택 2. 이 둘을 비교, 순서가 맞지 않으면 서로 교환 3. 1회전이 끝나면 가장 큰 숫자는 뒤로 가게 된다. 4. 위 과정을 정렬이 안된 리스트에서 반복 예를 들어 요소의 갯수가 5개이고 3 2 6 1 5 라는 배열이 있다면 1회전 - 2 3 6 1 5 2회전 - 2 3 6 1 5 3회전 - 2 3 1 6 5 4회전 - 2 3 1 5 6 위와 같은 절차가 1번의 스캔이다. 다른 정렬은 1번의 ..
삽입 정렬은 오름차순 기준으로, 정렬이 완료된 기존의 카드 사이에 올바른 자리를 찾아 삽입하는 정렬이다. 1. 정렬되어 있지 않은 리스트의 첫 번째 숫자를 선택 2. 자신을 기준으로 인덱스를 감소시키며(뒤에 부터) 하나 씩 비교해 가며 자신보다 작은 숫자를 찾는다. 3. 자신보다 크다면 그 숫자를 뒤로 한 칸 미룬다. 4. 자신보다 작다면 연산을 멈춘다. 5. 위 과정을 정렬되어 있지 않은 리스트의 마지막 요소까지 반복 주의할 점은, index를 앞에서 부터 비교하는 것이 아니라 뒤에서 부터 비교한다. 즉, (자신의 인덱스-1)번부터 0번까지비교하여 인덱스가 점점 감소한다. 그리고 첫 회전에서 시작은 0번이 아니라 1번부터 시작한다. 예를 들어 요소의 갯수가 5개이고 3 2 6 1 5 라는 배열이 있다면..
선택 정렬은 오름차순 기준으로 1회전 시 마다, 가장 작은 숫자를 선택하여 맨 앞으로 차례대로 정렬하는 기법이다. 입력 배열 외에는 다른 추가 메모리를 요구하지 않는, 즉 한 리스트안에서 교환해여 해결하는 것을 제자리 정렬(in-place sorting)이라고 한다. 1. 입력 배열에서 정렬되지 않은 값 중 최솟값을 검색 2. 이 최솟값을 배열의 1 번째 요소와 교환 3. 1 번째 요소(배열 중 최솟값, 정렬이 완료된 요소)를 제외한 나머지 값 중에서 가장 작은 값을 검색 4. 이 최솟값을 배열의 두 번째 요소와 교환 5. 이 과정을 배열요소갯수-1만큼 되풀이 주의할 점은, index값이 0에서 n-2까지만 변화된다. 만약 A[0]부터 A[n-2]까지 정렬되어 있다면 이미 A[n-1]이 가장 큰 값이기 ..
자바8부터 방식이 바뀌었다.--------------------------------------------자바8에서는 다음과 같이 변경한다. - Array(int[], Integer[]) to Collection(List)1. int[] to ListSystem.out.print("\n int[] to List \n"); int[] intArr = new int[3]; intArr[1] = 1; intArr[2] = 2; for (int i : intArr) System.out.print(i); System.out.println(); List integerListForInt = Arrays.stream(intArr).boxed().collect(Collectors.toList()); for (int i ..
프로그래밍을 하면서 Array나 Collection의 내용을 랜덤으로 바꿔야할 때가 있다. c언어에서는 rand? 함수를 썼던 것으로 기억하고 자바에서는 Random 클래스가 제공되어(혹은 Math.random()) 이것을 사용하여 랜덤 값을 뽑아낸다. 그러나 이는 단순히 랜덤값을 뽑아내기만 하므로, 랜덤으로 배치하거나 이미 나온 값을 제외하고 다른 값을 뽑아야 하는 등의 처리는 따로 해야한다. 자바의 API를 사용하면 쉽게 배열이나 리스트의 순서를 변경할 수 있다. Array의 경우 숫자나 문자를 랜덤으로 섞는 경우. 제비뽑기를 한다던가 할 때 사용할 것이고 Collection의 경우는 말그대로 Collection을 랜덤으로 섞어야 하는 경우일 것이다. 예를 들어서, 마피아라는 게임을 한다면 사용자들에..
* JDK 1.8부터 배열 컬렉션을 컨버팅하는 방법이 바뀌었다. 아래 글 참조바란다.https://defacto-standard.tistory.com/20 Arrays.sort()는 Primitive Type이나 Object Type의 Array를 정렬할 때 쓰고 Collections.sort()는 Collection의 List를 정렬할 때 쓴다. 기본적으로 둘 다 오름차순 정렬이고, 인자로서 Array 또는 List를 넣어주면 인자로 넘겨진 객체의 내용 자체가 바뀐다. 둘 다 static method이므로 Arrays나 Collections객체를 생성하는 것이 아니라 바로 호출한다. Arrays.sort(), Collections.sort() 모두 Comparator를 통한 커스터마이즈 정렬을 지원한다..
포인터의 크기는 무조건 4바이트가 아니다. 64비트 OS -> 8바이트 32비트 OS -> 4바이트 16비트 OS -> 2바이트 이와 같은 이유는 간단하다. 포인터가 저장하는 값은 '주소'이다. 8비트는 1바이트이다. 따라서 64비트는 8바이트이다. 즉, 주소 하나를 지정하는데 64비트를 쓰므로 64비트 운영체제라고 하는 것이고 주소 하나를 지정하는데 32비트를 쓰므로 32비트 운영체제라고 하는 것이고 주소 하나를 지정하는데 16비트를 쓰므로 16비트 운영체제라고 하는 것이다. 윈도우 XP의 경우 램을 4기가 이상을 인식하지 못하는 이유도, 램이 저장가능한 총 주소는 4기가라고 하더라도 OS자체에서는 그 이상의 값을 가지지 못하기때문이다. 결론은 포인터 변수는 주소 하나를 지정하는데 쓰이므로, 해당 OS..
Overloading 한 클래스 내에서, 같은 이름의 메서드를 사용하지만 매개변수의 개수 또는 타입이 다른 경우이다. Method Signature가 서로 다른 메서드를 정의해야 하며, Method Signature가 같다면 컴파일 오류가 난다. Method Signature는 메서드를 구분하는 기준이다. 오버로딩의 조건 1. 메서드 이름이 같다. 2. 매개변수의 갯수 또는 타입 또는 순서가 달라야 한다. - 매개변수의 갯수, 타입이 같더라도 순서가 다르면 오버로딩이 가능하다. - 매개변수의 갯수, 타입, 순서가 같은 상황에서 매개변수의 이름이 다르다고 오버로딩이 되는 것은 아니다. 위 2개 조건을 Method Signature라고 한다. 즉, 오버로딩은 함수명이 같지만 Method Signature가 ..
클래스 메서드는 static method라고 한다. static 키워드를 붙인 method이다. 반대로 static 키워드를 붙이지 않으면 인스턴스 메서드라고 한다. static키워드를 붙이면 인스턴스를 생성하지 않아도 클래스명.메서드명과 같이 호출할 수 있다. static 키워드에 대한 설명은 다음과 같다. 1. 멤버변수 중 모든 인스턴스에 공통적으로 사용하는 것들에 사용 생성된 각 인스턴스는 독립적이므로, 각 인스턴스 변수들은 서로 다른 값을 가진다. 그러나 한 클래스의 메서드의 호출 횟수라던지 (여러 인스턴스라도 같은 클래스라면 증가)의 경우에는 모든 인스턴스에서 같은 값을 가져야 하므로 static변수를 설정해야 한다. 2. static 변수는 인스턴스를 생성하지 않아도 사용할 수 있다. 클래스가..