Java

· Backend/Java
공통점둘 다 객체를 비교하는 기능을 가지는 인터페이스라는 점에서 동일합니다.Comparable// Comparable 인터페이스 구현, int compareTo(T t1, T t2) 메서드 오버라이드 필요class Item implements Comparable { int value; @Override public int compareTo(Item i2) { return value - i2.value; }}Comparator// Comparator 인터페이스 구현, int compare(T t) 메서드 오버라이드 필요class Item implements Comparator { int value; @Override public int compare(Ite..
해시를 사용하면 공간 복잡도를 많이 줄일 수 있는 간단한 문제입니다.class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { Map fields = new HashMap(); fields.put("code", 0); fields.put("date", 1); fields.put("maximum", 2); fields.put("remain", 3); int[][] list = new int[data.length][fields.size()]; int j = 0; for (int i = 0; i ..
문제 설명매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.제한 사항scoville의 길이..
힙 정렬(Heap Sort)힙의 성질을 이용해 정렬하는 정렬 방식입니다.Cf. 힙의 성질: 힙은 항상 느슨한 정렬 상태를 유지하고, 루트 노드의 key값이 트리 내에서 가장 높거나 낮다(최대/최소힙)일반적으로 \(O(n\log{n})\)의 시간 복잡도를 가집니다. (노드 하나를 재정렬 하는데에 \(O(\log{n})\)의 시간 복잡도 소요)구현 코드처음에는 Heap을 구현해서 Array를 인자로 받아 Heap을 채워 heapify 한 뒤, 하나씩 delete해서 루트를 얻어내 값을 정렬할 생각이었습니다. 그런데 그러자니 Heap 내부의 Array를 생성하는 과정이 들기 때문에 추가로 메모리가 들게 되어 추가 메모리가 사용되지 않게 해보자는 취지로 아래와 같이 작성했습니다.먼저, Array를 받아다가 he..
힙(Heap)은 배열 또는 연결 리스트(Linked List)로 구현할 수 있다. 연결 리스트 보다는 배열로 구현하는 것이 연산시 노드를 탐색하는 과정에서 비교적 간단하여 배열로 구현했다. 연결 리스트로 구현하는 경우 인덱스가 비교적 복잡해진다.Cf. 리스트로 구현하면 `resize()` 메서드를 따로 둘 필요가 없어진다. `capacity`값도 마땅히 필요하지 않아진다.Cf. 리스트로 구현하면 인덱스는 0 이상 `this.size` 미만이며, 자식 노드는 특정 노드의 인덱스가 \(n\)이라면, \(n * 2 + 1\), \(n * 2 + 2\)가 된다.필요시 참고용도로 리스트로 힙을 구현하는 코드를 일부 작성해두신 분의 블로그 게시글 링크를 첨부한다. 전체 코드(최소힙을 구현하여 루트값이 가장 작은 형..
· Backend/JPA
클래스 Member의 구조 @Table(name = "member") @Entity @Setter @Getter @ToString(exclude = "certKey") @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title", nullable = false) private String title; @Column(name = "content", nullable = false) private String content..
· Backend/Java
Java 소스 코드의 실행 과정요약자바 파일(.java)은 javac(=java compiler)에 의해 바이트 코드(.class)로 컴파일된다.JVM의 클래스 로더(Class Loader)가 필요한 클래스들을 로드 및 링크하여 JVM 메모리(Runtime Data Area)에 올린다.Java는 런타임(컴파일 타임 X)에 클래스를 처음 참조할 때에는 해당 클래스를 로드하고 링크하는 동적 로드를 한다. 이 동적 로드를 수행하는 부분이 JVM의 클래스 로더이다.클래스 로더의 특징계층 구조 : 부트스트랩 클래스 로더 > Extension 클래스 로더 > System 클래스 로더 순위임 모델 : 클래스 로더끼리 로드를 위임하는 구조로 동작한다. (이전에 로드 된 클래스인지 확인하기 위해 클래스 로더 캐시를 확인..
· Backend/Java
Annotation 어노테이션은 사전적인 정의로 주석이라는 의미를 가집니다. 흔히 개발할 때 접할 수 있는 대표적인 어노테이션들로 @Override, @Deprecated 부터 시작해서 Spring에서는 @Service, @Controller등이 있습니다. JDK 1.5 버전 이상에서 사용 가능하며, 자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용할 수 있습니다. 클래스, 필드, 메서드 및 기타 프로그램 요소의 선언부에 사용할 수 있으며, Java 8에 들어와서는 타입 매개변수에도 사용할 수 있게 되었습니다. (관련글 링크) 그렇다면, 왜 어노테이션을 사용할까? 1) 코드가 간결해진다. 개발을 하다보면 저같은 초보 개발자는 보일러 플레이트 코드를 마주하기 쉽습니다. 비슷한 동작을 필요로 하는 곳들마..
· Backend/Java
Annotation Java 8 부터 어노테이션을 1)타입 선언부에도 사용 가능하게, 2)중복해서 사용할 수 있게 바뀌었다. 타입 선언부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 타입에 사용하기 위한 준비 사항 @Target 을 통해 해당 클래스가 어노테이션으로써 사용될 수 있는 곳을 정의할 수 있다. Java 8에 TYPE_PARAMETER와 TYPE_USE 두 가지 타입이 추가되었다. 1) ElementType.TYPE_PARAMETER 해당 클래스를Type Parameter에만 사용 가능해진다. Cf. 하나 이상의 타입 매개변수(Type Parameter)를 선언하고 있는 클래스 혹은 인터페이스를 제네릭 클래스(제네릭 인터페이스)라고 하며,이를 모두 제네릭 타입이라고 한다. 예시로, 어노테이..
· Backend/Java
Cf. Concurrent Software란? 동시에 여러 작업을 할 수 있는 소프트웨어를 의미합니다. Ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있는 SW Ex) 녹화를 하면서 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있는 SW Java에서 제공하는 Concurrent Programming 멀티 프로세싱과 멀티 스레딩으로 나뉩니다. Multi-Processing(ProcessBuilder) Multi-Thread Java Multi-Thread Programming Thread 상속 또는 Runnable 구현(Runnable이 함수형 인터페이스로 변경되었기 때문에 Lambda로 작성 가능합니다.) public class App { public static void ..
devYH
'Java' 태그의 글 목록