코딩테스트 연습 - 전화번호 목록 이 문제는 길이에 따라 정렬한 뒤, 그 길이보다 짧은 번호들을 모두 확인해보는 것이 핵심이다. 나는 Set[]을 사용했는데, Set의 contains를 사용할 경우 O(1)의 시간으로 찾을 수 있기 때문이다. 따라서, 길이를 len이라고 뒀을 때, O(len)의 시간으로 해당 전화번호의 접두사가 있는지 확인할 수 있다. 정렬을 하는 이유는 길이가 긴 번호가 앞에 올 수 있는데, 이 때는 나중에 짧은 번호가 들어왔을 때 다른 번호의 접두사인지 확인할 수 없기 때문이다. 따라서, 반드시 정렬을 먼저해 접두사로 사용될 번호들을 저장해두고 확인해야 한다. 해당 전화번호에 접두사가 있는지 확인하는 로직은 아래와 같다. for(String number : phone_book){ i..
분류 전체보기
9장_값 타입 JPA의 데이터 타입을 크게 두 가지로 나누면 엔티티 타입과 값 타입이 있다. 엔티티 타입은 @Entity로 정의하는 객체고, 값 타입의 경우 자바 기본 자료형부터 객체까지 가능하다. 엔티티 타입의 경우는 식별자로 구분되기 때문에 식별자 값만 변하지 않는다면 같은 엔티티로 인식된다. 하지만 값 타입은 식별자가 없기 때문에 값이 달라지면 완전히 다른 값으로 대체된다. 값 타입은 세 가지로 나눌 수 있다. 자바 기본형 임베디드 타입 컬렉션 타입 임베디드 타입은 JPA에서 사용자가 지정한 값 타입이고 컬렉션 타입은 하나 이상의 값 타입을 저장할 때 사용한다. 기본 값 타입 기본 값 타입은 엔티티에 의존한다. 엔티티가 사라지면 값 타입 역시 소멸된다. 또한, 값 타입은 절대 공유되지 않는다. 임베..
int[] arr = {5,1,3,4,2};// 오름차순 정렬Arrays.sort(arr);위와 같이 정수형 배열을 오름차순으로 정렬하려면 Arrays.sort메소드를 사용하면 된다. 특정 구간을 정렬하려고 하면 Arrays.sort(arr, 시작, 끝)을 통해 구간을 오름차순으로 정렬할 수 있다. 내림차순으로 정렬하고 싶다면 어떻게 해야할까?매개변수가 없는 sort 자체는 오름차순 정렬밖에 지원하지 않는다. 그럼 매개변수에 비교기준을 반대로 넣으면 되지 않을까?Arrays.sort((num1,num2)-> num2 - num1);와 같이 말이다. 하지만, 이는 불가능한데 sort메서드가 Comparator 함수형 인터페이스를 매개변수로 사용하고 있기 때문이다. Comparator 인터페이스는 객체간의 ..
13913번: 숨바꼭질 4 처음에는 Move 클래스 안에 StringBuilder나 StringBuffer를 넣어서 이전의 경로를 복사해서 최종 경로를 찍도록 했는데 시간 초과가 났다. 아무래도 복사 비용과 새 인스턴스 생성하는 비용이 커서 그런 것 같다. 그래서 예전에 봤던 방법을 사용했는데 prev 배열에 직전 경로를 저장하는 방법이다. prev[a] = b 는 a로 가기위해서는 b를 거친다는 의미이다. 이후 아래와 같이 마지막 K부터 시작점 N까지의 경로를 추적해서 출력하면 된다. int index = K; while(index != N){ index = prev[index]; } 방문 처리 위치에 따라 직전 경로가 갱신이 될 수 있기 때문에 방문 처리 위치도 중요하다. static void BFS..