본문 바로가기

Develop199

Java 에러 - Exception in thread "main" java.util.regex.PatternSyntaxException 다음과 같이, "+"를 구분자로 split() 메서드를 이용해서 문자열을 분리하려 했다. 에러 메시지는 다음과 같았다. 구글링을 통해 확인해보니, ?, *, +, (, ), [, ], {, } 와 같은 일부 특수 문자를 replace(), replaceAll(), split() 메서드의 구분자나 기준으로 사용할 때 발생하는 에러라고 한다. 해결방안은 위 특수문자 앞에 역슬래쉬 2개(\\)를 같이 넣어주면 가볍게 해결할 수 있다. // example String str = "123+456"; String[] strArr = str.split("\\+"); // 역슬래쉬 = 원화 표시 // strArr = ["123", "456"] ++ 위 특수문자 양 옆에 대괄호([])로 감싸줘도 가능하다. // exam.. 2023. 3. 20.
우선순위 큐(Priority Queue)를 공부하면서 Queue는 먼저 선입선출(FIFO)이라는 특징을 가지는 구조이다. (Stack은 후입선출 - LIFO) 그럼 우선순위 큐는? 우선순위 큐는 말 그대로 우선순위가 높은 데이터를 먼저 뽑아내는 구조를 말한다. 그럼 여기서 의아할 게 어떤 기준을 가지고 우선순위를 정하는 걸까 싶은데, 단순히 요소의 크기를 우선순위를 잡고 오름차순, 내림차순 정렬을 할 수 있고, 우선순위 큐의 타입을 배열로 지정한다면, 특정 요소의 크기순으로 우선순위 기준을 잡을 수도 있다. Queue pq = new PriorityQueue(Comparator.comparingInt(o -> o[1])); (pq라는 우선순위 큐에는 int타입의 1차원 배열이 들어가게 되고, 배열의 1번째 인덱스의 값을 기준으로 정렬이 된다) Java에서 .. 2023. 3. 6.
Java 진수 변환 10진수 → n진수 public class Test { public static void main(String[] args) { int k = 15; System.out.println("10진수 → 2진수"); System.out.println(Integer.toString(k,2)); System.out.println(Integer.toBinaryString(k)); System.out.println(); System.out.println("10진수 → 3진수"); System.out.println(Integer.toString(k,3)); System.out.println(); System.out.println("10진수 → 4진수"); System.out.println(Integer.toString.. 2023. 2. 18.
2개 리스트의 교집합, 합집합, 차집합 구하기 교집합 retainAll() 메서드로 두 리스트의 교집합 구하기 import java.util.Set; import java.util.HashSet; import java.util.Arrays; import java.util.List; import java.util.ArrayList; public class Test { public static void main(String[] args) { Set str1Set = new HashSet(Arrays.asList("ab", "bc", "cd", "ef", "fg")); Set str2Set = new HashSet(Arrays.asList("cd", "ef", "fg", "gh", "hi")); Set intersection = new HashSet(st.. 2023. 2. 17.
2개의 List를 Stream을 사용하여 비교하기 noneMatch ( 불일치하는 요소 ) import java.util.Arrays; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class Test { public static void main(String[] args) { List str1List = Arrays.asList("ab", "bc", "cd", "ef", "fg"); List str2List = Arrays.asList("cd", "ef", "fg", "gh", "hi"); List filteredList = str1List.stream() .filter(el -> str2List.stream().n.. 2023. 2. 17.
Map 순회하기 Iterator 사용 Map map = new HashMap(); Iterator keys = map.keySet().iterator(); while (keys.hasNext()) { String key = keys.next(); map.get(key); } entrySet 사용 Map map = new HashMap(); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); } Map은 Key-Value 쌍으로 이루어져있고, 이 한 묶음을 Entry라고 표현한다. keySet 사용 Map map = new HashMap(); for (String key : map.keySe.. 2023. 2. 10.
ArrayList vs LinkedList List 인터페이스는 Java의 Collection을 확장한 인터페이스이다. ArrayList와 LinkedList 모두 이 List 인터페이스의 구현체이다. ArrayList 먼저, ArrayList는 배열(array)에 기반을 두고 있다. index를 통한 요소 검색에 빠르다는 장점이 있지만, 요소의 추가 삭제가 느리다는 단점이 있다. ArrayList의 일반적인 add() 메서드(맨 마지막 요소 뒤에 요소를 추가하는)를 통한 요소 삽입은 시간복잡도 Big-O 기준 O(1)의 시간복잡도를 가진다. 그러나, 특정 요소 사이에 요소를 삽입하거나 삭제하는 과정의 시간복잡도는 O(n)을 가진다. LinkedList LinkedList는 각 노드(Node)가 서로 연결되어 있는 형태이다. 링크를 건다라는 말을.. 2023. 2. 9.
LRU(Least Recently Used) Cache 교체 알고리즘 Programmers Lv.2 - [1차] 캐시 캐시(Cache)는 연산에 필요한 데이터들을 미리 저장하는 임시 메모리이다. 연산을 처리할 때, CPU에서 주기억장치, 보조기억장치까지 도달해서 연산을 처리한다. 이는 물리적으로 거리가 멀어서 비용이 많이 든다. 캐시의 경우는 CPU 바로 옆에 붙어있기 때문에, 물리적으로 거리가 가까워 비용이 적다. 그렇기 때문에, 연산에 자주 사용되는 값이나 데이터들을 캐시에 미리 적재해놓으면 접근 시간을 줄여 성능을 높일 수 있다. 캐시 히트(Hit)율, 캐시 미스(Miss)율이라는 것이 존재한다. 캐시에 적재된 데이터들을 사용하여 연산을 처리하면, 캐시 히트율이 올라가는 거고, 적재된 데이터들을 사용하지 않으면 캐시 미스율이 올라가는 것이다. LRU 캐시 교체 알고리.. 2023. 2. 8.
Spring Boot Configuration Annotation Processor not configured 민감한 정보의 properties의 정보를 읽어오기 위해서, @ConfigurationProperties(prefix = ) 애너테이션을 사용했을 때, 발생했던 에러이다. 'Spring Boot Configuration Annotation Processor not configured' 이유는 Intellij와 Gradle 버전이 업데이트 되면서 필수적으로 추가해주어야 하는 의존 라이브러리가 생겼다고 한다. 그래서 다음과 같은 의존 라이브러리를 추가해주었다. dependencies { annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor:3.0.2' } reload를 시킨 후, 다시 보니 경고 다음과 같은 경고 문.. 2023. 1. 27.