| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 완전탐색
- 백트래킹
- 프로그래머스Lv2
- 프로그래머스lv3
- 코딩테스트
- 동적계획법
- Comparable
- 정렬
- Comparator
- 혼공얄코
- 이분탐색
- TreeMap
- 파라메트릭서치
- java
- greedy
- HashMap
- hackerrank
- 너비우선탐색
- map
- BFS
- 그리디
- DFS
- 우선순위큐
- 오블완
- 프로그래머스
- 자바
- 티스토리챌린지
- 알고리즘
- spring security 설정
- DP
- Today
- Total
목록전체 글 (227)
쉽게 쉽게
📌 핵심 요약matches()는 전체 일치, find()는 부분 탐색 — 가장 많이 혼동하는 지점이다String.matches()는 호출마다 패턴을 컴파일한다 — 루프에서는 Pattern.compile()로 빼둔다replaceAll의 치환 문자열에서 $와 \는 특수문자다 — 변수를 그대로 넣으면 터진다replace는 리터럴, replaceAll은 정규식 — 이름이 뜻과 반대로 느껴진다정규식 하나로 서버가 멈출 수 있다 — ReDoS는 실제로 일어나는 장애다 목차1 String의 메서드와 Pattern 객체자바에서 정규식을 쓰는 길은 두 가지입니다. 간편한 쪽과 제대로 하는 쪽입니다. Java — String의 메서드// 간편하지만 호출마다 패턴을 컴파일한다"12345".matches("\\d+"); ..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약new File(...)은 파일을 만들지 않는다 — 경로를 적어둔 쪽지일 뿐이다listFiles()는 null을 돌려줄 수 있다 — 바로 for문에 넣으면 NPEmkdir()과 mkdirs()는 다르다 — 중간 경로가 없으면 전자는 실패한다File의 메서드는 실패 이유를 알려주지 않는다 — false만 돌려준다요즘은 Path와 Files를 쓴다 — 실패하면 예외로 원인을 알려준다 목차1 File 클래스자바에서 파일과 디렉터리를 다루는 전통적인 클래스입니다. 가장 먼저 짚어야 할 오해가 하나 있습니다. Java — 파일이 만들어지지 않는다File f = new File("없는파일.txt");System.out.print..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약collect()는 "어떻게 모을지"를 밖에서 받는다 — 그 방법이 Collector다toMap은 키가 겹치면 터진다 — 세 번째 인자로 합치는 방법을 줘야 한다groupingBy는 분류 키 하나로 Map을 만든다 — 두 번째 인자로 집계까지 같이 한다orElse는 항상 실행되고 orElseGet은 비었을 때만 실행된다 — 무거운 연산이면 결과가 다르다parallelStream()은 기본 선택이 아니다 — 대부분 순차가 더 빠르다 목차1 collect와 Collectorcollect()는 최종 연산입니다. 그런데 다른 최종 연산과 다른 점이 있습니다. 무엇을 할지가 정해져 있지 않습니다.count()는 개수를 세고, ..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약count++는 한 줄이지만 세 단계다 — 그 사이에 다른 쓰레드가 끼어들면 값이 틀어진다synchronized는 락을 거는 것 — 무엇에 락을 거는지가 핵심이다volatile은 가시성만 해결한다 — count++는 volatile로도 안전해지지 않는다wait()은 반드시 while 안에서 — if로 쓰면 가짜 깨어남에 뚫린다실무에서는 쓰레드를 직접 만들지 않는다 — ExecutorService에 작업만 맡긴다 목차1 왜 동기화가 필요한가앞 글에서 쓰레드는 힙을 공유한다고 했습니다. 공유한다는 건 같은 객체를 동시에 건드릴 수 있다는 뜻입니다. 코드로 보면 바로 문제가 드러납니다. Java — 10000이 나올까cla..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약클래스는 설계도, 객체는 그 설계도로 만든 실제 물건 — 붕어빵 틀과 붕어빵의 관계다변수는 세 종류 — 인스턴스 변수, 클래스 변수(static), 지역변수. 선언 위치가 성격을 결정한다static이 붙으면 모두가 공유한다 — 인스턴스를 만들지 않아도 쓸 수 있고, 한 곳에서 바꾸면 전부 바뀐다변수의 종류는 곧 메모리 위치의 차이다 — 인스턴스 변수는 힙, 클래스 변수는 메서드 영역, 지역변수는 스택에 놓인다 목차1 객체지향이란 무엇인가프로그램을 만드는 방식에는 크게 두 갈래가 있습니다.방식중심비유절차지향순서대로 실행되는 기능요리 순서를 하나씩 적은 레시피객체지향역할을 가진 객체들의 협력주방장 · 보조 · 서빙이 각자..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글이며, 객체지향과 변수의 종류 편에 이어집니다.📌 핵심 요약추상화는 공통점만 뽑아내는 것 — 자동차와 트럭에서 "출발한다·멈춘다"를 뽑아 상위 개념으로 만든다상속은 그 공통점을 물려주는 것 — 자바는 단일 상속만 되며, 여러 개가 필요하면 인터페이스를 쓴다생성자는 메서드가 아니다 — 반환 타입 자체가 없다. void를 붙이면 생성자가 아니라 일반 메서드가 된다this()와 super()는 첫 줄에서만 — 초기화가 끝난 뒤 다시 초기화되는 것을 막기 위해서다 목차1 추상화추상화(abstraction)는 여러 대상에서 공통적인 속성과 기능만 뽑아내는 것입니다.자동차, 트럭, 오토바이를 생각해봅시다. 생김새와 용도는 다르지만 "출발한다", "..
📌 핵심 요약String은 불변(immutable) — 모든 메서드는 원본을 바꾸지 않고 새 문자열을 반환한다. 결과를 변수에 담지 않으면 아무 일도 일어나지 않는다비교는 equals()로 — ==는 주소를 비교하므로 같은 내용도 false가 나올 수 있다범위는 "시작 포함, 끝 제외" — substring(1, 4)는 인덱스 1·2·3만 가져온다replace와 replaceAll은 다르다 — 전자는 그냥 문자열, 후자는 정규식을 받는다 목차1 먼저 알아야 할 두 가지String은 바뀌지 않는다앞으로 볼 메서드를 쓰기 전에 이것부터 알아야 합니다. String의 메서드는 원본을 절대 바꾸지 않습니다. 항상 새로운 문자열을 만들어 반환합니다. Java — 가장 흔한 실수String s = " hello..
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약배열은 한 번 만들면 길이를 바꿀 수 없다 — 더 넣으려면 큰 배열을 새로 만들어 옮겨야 한다int[] b = a; 는 복사가 아니다 — 같은 배열을 가리키는 이름표가 하나 더 생길 뿐이다clone()은 깊은 복사가 아니다 — 1차원 기본형에서만 그렇게 보일 뿐, 2차원 배열에서는 원본이 함께 바뀐다복사 방법은 4가지 — clone, Arrays.copyOf, Arrays.copyOfRange, System.arraycopy 목차1 배열이란배열(array)은 같은 타입의 여러 값을 하나의 묶음으로 다루는 자료구조입니다.학생 100명의 점수를 저장한다고 해봅시다. 변수를 100개 만들 수는 없습니다. 배열을 쓰면 이름 ..
이 글은 TreeMap 실전 활용 편에 이어지는 글입니다.📌 핵심 요약정렬이 아니라 "다음에 처리할 하나"를 뽑는 도구다 — 전체를 정렬하지 않고도 최솟값만 O(1)에 확인할 수 있다기본은 최소 힙 — 최대 힙이 필요하면 Comparator.reverseOrder()를 넘긴다상위 N개는 반대로 담는다 — 큰 값을 구하는데 최소 힙을 쓴다. 버릴 것을 맨 앞에 두기 위해서다순회 결과는 정렬 순서가 아니다 — 정렬된 순서를 보려면 반드시 poll로 꺼내야 한다 목차1 언제 PriorityQueue를 쓰는가작업 목록에서 우선순위가 가장 높은 것부터 처리해야 한다고 해봅시다. 그런데 처리하는 도중에도 새 작업이 계속 들어옵니다. Java — List로 처리하면while (!tasks.isEmpty()) { ..
📌 핵심 요약카데인(Kadane) 알고리즘 변형 — 부호가 매 칸 뒤집히는 조건이 붙은 최대 부분합 문제다.부호 두 갈래를 동시에 추적 — 구간이 어디서 시작하든 그 시작점의 부호는 +1일 수도 -1일 수도 있어서, 두 흐름을 따로 갱신해야 한다.오버플로 방지 캐스팅 — sequence[i]는 int이므로 곱셈 전에 long으로 미리 바꿔줘야 한다. 목차 1 문제가 요구하는 것펄스 수열은 [1, -1, 1, -1, …] 또는 [-1, 1, -1, 1, …]처럼 시작 부호만 다르고 이후로는 계속 번갈아가는 수열이다. 이 펄스를 원래 수열의 연속 부분 구간에 원소별로 곱하면, 홀수 번째 원소는 그대로, 짝수 번째 원소는 부호가 뒤집힌 구간이 만들어진다. 이 곱셈 결과의 합 중 최댓값을 구하는 문제다.부분 ..
