일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코테
- Math
- Tree
- bit manipulation
- geometry
- Binary Tree
- Data Structure
- dynamic programming
- Counting
- 구현
- array
- 코딩테스트
- Matrix
- string
- SQL
- hash table
- simulation
- database
- 파이썬
- 자바
- implement
- Number Theory
- Binary Search
- Class
- Method
- java
- Stack
- sorting
- two pointers
- greedy
- Today
- Total
목록greedy (35)
코린이의 소소한 공부노트
1. Input 1) int[] nums 2) int[] queries 2. Output 1) 다음을 따라 만든 배열을 반환 - i번째 요소에 nums의 요소들의 합이 queries[i] 이하인 nums의 부분 배열 중 길이가 가장 긴 것을 찾아 그 길이를 저장 - 부분 배열은 nums상에서 연속적일 필요는 없다. 3. Constraint 1) n == nums.length 2) m == queries.length 3) 1 4 5. Code 1) 첫 코드(2023/06/26) class Solution { public int[] answerQueries(int[] nums, int[] queries) { int[] ans = new int[queries.length]; Arrays.sort(nums); ..
1. Input 1) int[] cost - cost[i] = i번째 사탕의 가격 2. Output 1) 모든 캔디를 사는 데 필요한 최소 비용을 반환 - 캔디를 a, b 2개 사면 3번째 사는 캔디는 무료이다. - 이때 무료로 살 수 있는 캔디의 가격은 a와 b의 가격 이하여야 한다. 3. Constraint 1) 1
1. Problem - 크루스칼 알고리즘을 사용하여 모든 노드를 연결하는 최소 비용을 구해보자. - 최소 비용 신장 트리(minimum cost spanning tree)를 만드는 대표적인 알고리즘이다. - 각 노드를 연결하는 간선의 정보(연결된 노드, 비용)를 이용해 간선을 정렬한 후 사이클을 만들지 않게 적은 비용의 간선부터 차례대로 선택해 나간다. - 최소한의 비용으로 모든 노드를 이어야 하기 때문에, 사이클을 만드는 것은 비용 낭비가 된다. - 간선을 선택하기 전에 사이클 테이블을 확인해야 하는데, 이는 이미 연결된 노드인지 알아보기 위함이다. 사이클 테이블은 union-find(합집합 찾기) 알고리즘을 이용한다. 2. Input 1) int[][] graph - 연결된 노드를 표현 2) int[..
1. Input 1) int[] nums 2) int k 2. Output 1) 다음 과정을 k번 한 후에 나오는 점수 중 가장 큰 것을 반환 - nums에서 숫자를 하나 고른 후 nums에서 제거한다. - 고른 숫자를 내 점수에 더한다. - 고른 숫자보다 1 큰 수를 nums에 더한다. 3. Constraint 1) 1
1. Input 1) int[] nums 2. Output 1) 다음과 같은 작업을 반복할 때, 모든 요소들을 0으로 만드는 최소 횟수를 반환 - nums에서 가장 작은 양의 정수 x를 고른다. - nums에 있는 모든 양수에서 x를 뺀다. 3. Constraint 1) 1 nums = [0,0,0,0,0] 5. Code 1) 첫 코드(2023/05/02) class Solution { public int minimumOperations(int[] nums) { int answer = 0; Arrays.sort(nums); for(int i=0 ; i
1. Input 1) String number 2) char digit 2. Output 1) number에서 digit을 1개 제거했을 때 만들 수 있는 10진 수 중 가장 큰 것을 문자열로 반환 3. Constraint 1) 2
1. Input 1) int[] colors - colors[i] == i번째 집의 색을 나타내는 숫자 2. Output 1) 색이 다른 집의 거리 차의 최댓값을 반환 - 거리 >= 0이므로 반환 값도 0 이상이다. 3. Constraint 1) n == colors.length 2) 2
1. Input 1) String s 2. Output 1) s의 모든 문자를 'O'로 바꾸는 최소 횟수를 반환 - 한번에 연속된 3개의 문자를 O로 바꿀 수 있다. - O는 그대로 O이다. 3. Constraint 1) 3 OOOX -> OOOO 5. Code 1) 첫 코드(2023/04/26) class Solution { public int minimumMoves(String s) { int count = 0; for(int i=0 ; i
1. Input 1) String word 2. Output 1) word의 알파벳을 타이핑하는 데 필요한 최소 시간(초)을 반환 - 타자기는 원판으로 되어있다. - 처음 포인터는 a를 가리키고 있다. - 타자기는 시계방향 또는 반시계방향으로 돌릴 수 있다. - 포인터가 가리키고 있는 곳에서부터 타이핑하려는 문자까지 떨어진 칸의 수만큼 이동 시간이 걸린다. - 포인터가 가리키는 문자를 타이핑 하는데 1초가 걸린다. 3. Constraint 1) 1 b: 시계 방향으로 1칸 -> 1초 - b 타이핑: 1초 - b -> z: 반시계 방향으로 2칸 -> 2초 - z 타이핑: 1초 - z -> a: 시계 방향으로 1칸 -> 1초 - a 타이핑: 1초 - 1 + 1 + 2 + 1 + 1 + 1 = 7초가 걸리므로..
1. Input 1) String time 2. Output 1) time의 ?을 숫자로 바꿨을 때 가장 늦은 시간을 나타내는 문자열을 반환 3. Constraint 1) time은 00:00부터 23:59까지의 시간을 나타내는 문자열이다. 2) 항상 유효한 답이 있다는 것이 보장된다. 4. Example Input: time = "2?:?0" -> Output: "23:50" Input: time = "0?:3?" -> Output: "09:39" 5. Code 1) 첫 코드(2023/04/16) char[] t = time.toCharArray(); if(t[0]=='?'){ if(t[1]=='?'){ t[0] = '2'; t[1] = '3'; } else if(t[1]