| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 티스토리챌린지
- 혼공얄코
- 자바
- 완전탐색
- java
- BFS
- greedy
- TreeMap
- 자바의정석
- 자바의 정석
- 백트래킹
- 그리디
- 프로그래머스
- DFS
- 코딩테스트
- Comparator
- Comparable
- 프로그래머스Lv2
- 프로그래머스lv3
- 너비우선탐색
- 동적계획법
- 이분탐색
- priorityqueue
- DP
- hackerrank
- spring security 설정
- 우선순위큐
- 알고리즘
- 오블완
- 파라메트릭서치
- Today
- Total
목록전체 글 (225)
쉽게 쉽게
이 글은 '자바의 정석'의 내용을 기반으로 공부한 내용을 덧붙인 글입니다.📌 핵심 요약클래스는 설계도, 객체는 그 설계도로 만든 실제 물건 — 붕어빵 틀과 붕어빵의 관계다변수는 세 종류 — 인스턴스 변수, 클래스 변수(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, …]처럼 시작 부호만 다르고 이후로는 계속 번갈아가는 수열이다. 이 펄스를 원래 수열의 연속 부분 구간에 원소별로 곱하면, 홀수 번째 원소는 그대로, 짝수 번째 원소는 부호가 뒤집힌 구간이 만들어진다. 이 곱셈 결과의 합 중 최댓값을 구하는 문제다.부분 ..
이 글은 HashMap vs TreeMap vs LinkedHashMap편에 이어지는 글입니다. [Java] HashMap vs TreeMap vs LinkedHashMap📌 핵심 요약셋은 같은 Map 인터페이스, 다른 내부 구조 — 해시 테이블(HashMap), 해시 테이블 + 연결 리스트(LinkedHashMap), 레드-블랙 트리(TreeMap)순서가 필요 없으면 HashMap — 평균 O(1)로 가장 빠르다minsu092274.tistory.com 📌 핵심 요약TreeMap은 정렬된 상태 — 정렬된 상태이기 때문에 "이 값에 가장 가까운 키"를 O(log n)에 찾을 수 있다근처 키 찾기 4종 — floorKey(이하 최대), ceilingKey(이상 최소), lowerKey(미만 최대), h..
📌 핵심 요약답을 직접 구하지 않고 이분 탐색한다 — 인원 수를 정해 놓고 건널 수 있는지 판정하는 문제로 바꾼다.판정 함수는 O(n) 한 번 순회 — 값이 인원 수보다 작은 돌이 k개 연속이면 건널 수 없다.단조성이 이분 탐색의 근거 — 인원이 늘면 밟을 수 없는 돌은 늘기만 하고 줄지 않는다. 목차1 문제 정리Programmers #64062징검다리 건너기돌 개수 ≤ 200,000 · 돌의 값 ≤ 200,000,000난이도: Lv.3징검다리의 각 돌에는 숫자가 적혀 있다. 한 사람이 건널 때마다 밟은 돌의 숫자가 1씩 줄고, 0이 된 돌은 밟을 수 없다. 밟을 수 없는 돌은 최대 k칸까지 뛰어넘을 수 있다. 이때 몇 명까지 건널 수 있는지 구하는 문제다.풀이 과정"몇 명까지 건널 수 있나"를 "X명..
📌 핵심 요약간선 가중치가 모두 1 — 다익스트라 없이 BFS만으로 최단 거리를 구할 수 있다.dist 배열이 visited를 겸한다 — -1을 미방문 표시로 쓰면 배열 하나로 두 역할을 처리한다.방문 표시는 enqueue 시점 — 큐에서 꺼낼 때 표시하면 같은 노드가 중복으로 들어간다. 목차1 문제 정리Programmers #49189가장 먼 노드2 ≤ n ≤ 20,000 · 간선 ≤ 50,000난이도: Lv.3n개의 노드가 양방향 간선으로 연결된 그래프가 주어진다. 1번 노드에서 가장 멀리 떨어진 노드의 개수를 구하는 문제다. 여기서 "멀다"는 것은 최단 경로로 이동했을 때 거쳐야 하는 간선의 수가 가장 많다는 뜻이다.풀이 과정간선 목록을 인접 리스트로 변환한다.1번 노드에서 BFS를 돌려 모든 노..
📌 핵심 요약최소 신장 트리(MST) 문제 — 모든 섬을 사이클 없이 최소 비용으로 잇는다. 사용하는 다리는 정확히 n-1개다.프림 — 방문한 섬 집합을 하나씩 키운다. 매번 "한쪽만 방문된 다리" 중 최저 비용을 고른다.크루스칼 — 다리를 비용 오름차순으로 정렬한 뒤, 사이클을 만드는 다리만 건너뛴다.사이클 판별은 유니온 파인드 — parent[a] == parent[b]가 아니라 find(a) == find(b)로 비교해야 한다. 목차Programmers — 42861섬 연결하기n ≤ 100 · 간선 최대 4,950개난이도: Level 3n개의 섬과, 두 섬을 잇는 다리 목록 costs가 주어진다. costs[i] = [a, b, cost]는 a번 섬과 b번 섬을 cost 비용으로 이을 수 있다는 ..