📍 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비를 공부하고 주요 내용을 정리
String str2 = str1.toUpperCase();
toLowerCase()
char t = Character.toUpperCase(c1);
toLowerCase()
for(char x : str.toCharArray())
Character.isLowerCase(x)
int m = Integer.MIN_VALUE;
Integer.MAX_VALUE
pos = str.indexOf(' '))
String tmp = new StringBuilder(x).reverse().toString()
Character.isAlphabetic(c)
str.equalsIgnoreCase(tmp)
String str = s.toUpperCase().replaceAll("[^A-Z]", "");
Math.min(a,b)
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
for(int k=0; k<4; k++){
arr[i+dx[k]][j+dy[k]] // 현재 요소arr[i][j]의 상하좌우 요소를 가리키게 된다.
}
윈도우 사이즈가 k인 슬라이딩 윈도우를 이용해서 최대 sum을 구하기
2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 경우, N/2+1
까지만 고려하면 된다. ex) 15의 경우, 가장 큰 연속된 자연수의 합은 7+8이다. N/2+1
보다 큰 연속된 자연수의 합으로 N을 표현할 수 없다.
2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 경우, 투 포인터 말고도 '몫과 나머지'를 이용해서 답을 구할 수 있다.
반장투표 문제
아나그램(어느 한 단어를 재배열하면 상대쳔 단어가 될 수 있는지) 문제를 HashMap을 통해 해결할 수 있다.
슬라이딩 윈도우로 매출의 종류를 구하는 문제. HashMap을 이용해서 특정 매출에 해당하는 개수를 계산한다. 이때 포인트는 value가 0이면 remove 메서드를 사용해서 키 값을 삭제해준다.
TreeSet은 중복 제거 + 정렬을 지원한다. TressSet은 레드-블랙 트리로 구현되어 있다.
Q. 3중 for문에서 각 for문의 조건을 i < n-2, j < n-1, l < n 이렇게 설정하지 않아도 된다. i < n, j < n, l < n으로 설정하면 된다.
TreeSet의 주요 메서드
stack도 배열처럼 i번째 원소를 꺼낼 수 있다. stack.get(i)를 사용하면 된다.
후위 연산자 문제
Queue의 주요 메서드
우선순위큐 -> PriorityQueue
선택 정렬 코드
버블 정렬 코드
삽입 정렬 코드 -> 어렵다....😢
LRU(캐시 히트, 캐시 미스) 문제
array 깊은 복사하는 법 : arr.clone()
클래스의 정렬 기준 만들기
이분검색
UNION(합집합) 문제 푸는 아이디어
최소 신장 트리
를 찾는 그래프 문제의 경우, 크루스칼 알고리즘
또는 프림 알고리즘
을 활용 가능하다.
그래프 문제의 경우, 엣지의 개수를 예측할 수 없다. 또한 하나의 노드에서 파생되는 엣지의 개수도 예측할 수 없다.
따라서 엣지의 개수를 ArrayList<ArrayList<Edgs>> graph = new ArrayList<ArrayList<Edge>>()
자료형에 담는 것이 좋다. graph.get(n번째 노드 번호).get(해당 노드에서 연결되는 m번째 에지)
와 같이 노드에서 파생되는 엣지를 찾을 수 있다.
j번째 값에서 coin만큼의 값을 빼고 +1한 값(coin을 사용한 경우)
과 이전의 값을 비교한다.