일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Counting
- bit manipulation
- dynamic programming
- Math
- database
- simulation
- Tree
- 파이썬
- greedy
- array
- Binary Search
- SQL
- hash table
- Matrix
- string
- 자바
- sorting
- geometry
- Number Theory
- Stack
- 코딩테스트
- java
- Class
- 구현
- 코테
- implement
- Binary Tree
- Method
- Data Structure
- two pointers
- Today
- Total
목록recursion (12)
코린이의 소소한 공부노트
1. Input 1) ListNode l1 - 첫 번째 숫자를 일의자리부터 거꾸로 나타낸 ListNode 2) ListNode l2 - 두 번째 숫자를 일의자리부터 거꾸로 나타낸 ListNode 2. Output 1) 첫 번째 숫자와 두 번째 숫자의 합을 일의자리부터 거꾸로 나타낸 ListNode를 반환 3. Constraint 1) 각 linked list의 노드 수의 범위는 [1, 100]이다. 2) 0 Output: [8,9,9,9,0,0,0,1] 설명: - 342 + 465 = 807 - 9,999,999 + 9,999 = 10,009,998 5. Code /** * Definition for singly-linked list. * public class ListNode { * int val; *..

1. 개념 정리 1) 여러 개의 데이터가 연속적으로 존재할 때 특정 구간의 데이터의 합을 담은 이진 트리 2) 실제 구현은 트리가 아닌 배열로 하게 된다. - 배열은 인덱스가 있어 접근성이 좋기 때문이다. 3) 세그먼트 트리를 이용한 구간 합 처리의 시간 복잡도는 O(lgn)이다. 2. 예시 1) 구간 합의 데이터가 될 배열을 준비한다. int[] arr = {1,2,3,4,5,6,7,8}; 2) 구간 합 트리가 될 배열도 준비한다. int[] tree = new int[32]; // arr.length * 4 // 데이터의 개수가 N개일 때 필요한 부분 합 트리의 공간은 // N 이상의 2의 거듭제곱수 중 가장 작은 것 * 2이다. // 여기서 N=8이므로 8 이상의 2의 거듭제곱수 중 가장 작은 것은..

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. (1) 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (2) (1)이 아닌 경우에는 종이를 같은 크기의 종이 9개로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으로만 채워진 종이의 개수, 1로만 채워진 종이의 개수를 구해내는 프로그램을 작성하시오. 1. 입력 - 첫째 줄에 N(1 ≤ N ≤ 3^7, N은 3^k 꼴)이 주어진다. - 다음 N개의 줄에는 N개의 정수로 행렬이 주어진다. 2. 출력 - 첫째 줄에 -1로만 채워진 종..

흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다. 주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의 영역을 압축한 결과를 차례대로 괄호 안에 묶어서 표현한다. 위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을 쿼드..

한수는 크기가 2^N × 2^N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 크기가 2^(N-1) × 2^(N-1)로 4등분 한 후에 재귀적으로 순서대로 방문한다. N이 주어졌을 때, r행 c열을 몇 번째로 방문하는지 출력하는 프로그램을 작성하시오. 1. 입력 - 첫째 줄에 정수 N, r, c가 주어진다. - 1 ≤ N ≤ 15 - 0 ≤ r, c < 2^N 2. 출력 - r행 c열을 몇 번째로 방문했는지 출력한다. 3. 예제 4. 코드 1) 첫 코드 - 맞긴 하나 시간초과 import java.util.*; import java.io.*; class Main { st..
1. Input 1) ListNode head 2. Output 1) 연결 리스트를 뒤집은 결과를 반환 3. Constraint 1) 노드의 수의 범위는 [0, 5000]이다. 2) -5000
1. Input 1) ListNode head 2) int val 2. Output 1) head에서 head.val == val인 노드를 제거한 결과를 반환 3. Constraint 1) node의 수의 범위는 [0, 104]이다. 2) 1
1. Input 1) 연결 리스트 list1 2) 연결 리스트 list2 - 두 리스트 모두 오름차순으로 정렬되어있다. 2. Output 1) list1과 list2를 합쳐서 오름차순으로 정렬된 결과 리스트 반환 3. Constraint 1) 각각의 리스트의 노드의 수는 [0, 50]이다. 2) -100
1. Input 1) 정수 n 2. Output 1) F(n)을 계산한 결과 2) F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n은 2 이상의 정수) 3. Constraint 1) 0