java

    [Java] 프로그래머스 - 순위

    문제링크 코딩테스트 연습 - 순위 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 문제 주어진 승자와 패자가 있는 배열에서 순위를 결정지을 수 있는 사람이 몇명인지를 구하는 문제입니다. 주어지는 조건은 사람의 수 n 과 승/패 배열입니다. 풀이 주어지는 노드의 개수가 1~N 이므로 간단하게 노드들을 생성해두고, 승리자와 패배자를 연결하여 풀었습니다. 노드의 개수가 100개 이하이고, 배열의 길이가 4500개 이하이므로 시간초과를 크게 고려하지 않아도 될거 같습니다. 다음과 같은 순서로 풀이를 했습니다. 1. 노드들마다 자신이 알고 있는 승자와 패자를 넣음 2. 승자와 패자를 많이 알고 있는 노드 순으로 정렬한 후, 모든 노드를 순회하며, 다..

    EnumMap 살펴보기

    EnumMap EnumMap 클래스는 Map 구현체 중 Enum type 을 키로 사용하는 클래스입니다. HashMap 과 비교해봤을 때, EnumMap은 성능상의 이점을 노릴 수 있습니다. 그 이유를 살펴보겠습니다. 데이터 저장과정 생성자로 key type(enum) 을 넘겨주면, enum 에 정의된 열거형 상수의 개수만큼 내부적으로 Object 배열을 생성합니다. 따라서 null 을 허용하지 않습니다. 하지만 get 이나 remove 를 호출할때 null 을 넣어도 예외를 발생시키지 않습니다. public enum NumberEnum { ONE, TWO, THREE } class EnumTest { @Test void enum_test() { Map map = new HashMap(); map.put..

    PriorityQueue 살펴보기

    공부하게 된 계기 PriorityQueue를 꽤나 자주 사용하지만, 우선순위로 정렬하여 결과를 보여준다라고만 생각하고 있었습니다. 우선순위로 정렬을 하니, 전형적인 큐의 특성만 생각하여 넣을때마다 선형적으로 정렬되어 들어있을거라고 막연히 생각했었습니다. 최근에 알고리즘 문제를 풀며 PriorityQueue를 쓰게 되었는 데, 디버깅 과정에서 예상과는 다르게 정렬되어 있지 않은 것을 발견하고 왜 그런가를 확인해보게 되었습니다. public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { re..

    정렬을 돕는 Comparable, Comparator

    자바에는 정렬을 도와주는 인터페이스인 Comparable, Comparator 가 있습니다.Collection 을 통해 정렬을 간편히 수행할 수 있는 데, Comparable 이나 Comparator 를 구현하는 구현체이거나 람다를 이용하여 정렬방법을 구현해야 합니다. primitive 타입 배열과 같은 것들은 자연스러운 순서로 정렬이 됩니다.(Arrays.sort 는 DualPivotQuicksort 라는 알고리즘을 사용합니다.) Comparable Comparable 은 일반적으로 생각할 수 있는 정렬을 정의할 때 구현하는 인터페이스입니다. (물론, 꼭 그럴 이유는 없습니다만 JavaDoc 의 주석으로 되어있으므로, 일반적인 용례를 생각하면 그에 따르는 것이 혼란을 줄일 수 있습니다.) Compara..