전체 글

GIthub - https://github.com/abbiddo
· Algorithm/DP
https://www.acmicpc.net/problem/2482 2482번: 색상환 첫째 줄에 N색상환에서 어떤 인접한 두 색도 동시에 선택하지 않고 K개의 색을 고를 수 있는 경우의 수를 1,000,000,003 (10억 3) 으로 나눈 나머지를 출력한다. www.acmicpc.net DP 문제다. 원형 칸에서 나란하지 않은 k개를 고르는 경우의 수를 구하는 문제다. 몇가지 계산하다보니 바로 규칙을 찾을 수 있었다. 행이 n, 열이 k일 때 아래와 같은 표를 그릴 수 있다. 1 2 3 4 4 4 2 0 0 5 5 5 0 0 6 6 9 2 0 7 7 14 7 0 표를 통해 dp[i][j] = dp[j - 1][i] + dp[j - 2][i - 1]와 같은 점화식을 세울 수 있다. #include usi..
https://www.acmicpc.net/problem/1999 1999번: 최대최소 첫째 줄에는 세 정수 N, B, K가 주어진다. 다음 N개의 줄에는 행렬이 주어진다. 차례로 1행, 2행, …, N행이 된다. 각 줄에는 N개의 정수가 주어지며, 이는 차례로 1열의 성분, 2열의 성분, …, N열의 성 www.acmicpc.net 자료구조 문제다. N x N 행렬에서 B x B 크기 만큼에서 최대 최소를 찾아 그 차를 구하는 것이다. 모든 질문에 대해 B의 크기가 같다는 것을 못 보고 DP를 활용해 각각 최대 최소를 저장하는 배열을 만들려 했다. 그러나 B의 크기가 항상 동일하다는 것을 알고 DP가 아니라는 것을 알았다. 범위의 크기를 보니 무지성으로 탐색을 해도 괜찮을 것 같았다. 주의할 점은 중복..
https://www.acmicpc.net/problem/15926 15926번: 현욱은 괄호왕이야!! 첫 번째 입출력에서, 맨 처음 위치부터 4개를 잘라낸 (())가 가장 긴 올바른 괄호 문자열이다. 두 번째 입출력에서, 6번째 위치부터 8개를 잘라낸 ()((()))가 가장 긴 올바른 괄호 문자열이다. www.acmicpc.net 스택 문제다. 올바른 괄호 부분 문자열 중 길이가 가장 긴 것을 찾는 것이다. 처음에는 일반 괄호 짝 맞추기처럼 여는 괄호는 스택에 넣고 닫는 괄호를 만나면 스택에서 여는 괄호를 빼는 방법을 택했다. 이 때, 스택에 넣고 뺄 때마다 카운트를 했다. 닫힌 괄호를 만났을 때 스택이 비어 있으면 해당 사이즈 만큼 카운트를 줄였다. ((() 와 같이 열린 괄호가 많은 경우 반례가 생..
특징 데이터를 다루는데 최적화된 클래스다. 다양한 메소드를 자동으로 생성한다. toString() copy() hashCode() equals() componentN() 다른 클래스를 상속받을 수 없다. 메소드 toString() 객체가 가지는 프로퍼티의 값들이 출력된다. 기존 자바에서는 toString 메소드를 오버라이딩해야한다. data class User( val id: String, var name: String? ) fun main(){ var user = User("1", "abbiddo") print(user) // User(id=1, name=abbiddo) } copy() 객체 복사 시 특정 필드의 값만 바꿔 복사할 수 있다. data class User( val id: String, v..
코틀린의 장점 언어의 생산성, 간결성 코틀린은 자바에 비해 간결하고 직관적이어서 가독성이 좋다. 생성자, getter, setter 등 자바의 여러 준비 코드들을 묵시적으로 제공하기에 깔끔하다. 다양한 표준 라이브러리를 제공해 반복되는 코드를 줄일 수 있다. 타입 추론 var / val 키워드를 이용해 타입 추론이 가능하다. var: 초기화 후 값 변경이 가능한 변수 val: 초기에 값을 할당하면 나중에는 변경할 수 없는 변수 (상수) s라는 변수가 String임을 명시하지 않았으나 할당된 값에 따라 타입 추론으로 타입을 정한다. s에 할당된 값으로 String 변수로 인식되고, String의 메소드를 사용할 수 있다. fun main() { val s = "hello ~" println(s.substr..
select count(*), count(cust_id), count(distinct cust_id), sum(sales_qty*goods_price) from cust_sales; 쿼리문의 base 필수 구조다. select 컬럼명 from 테이블명 select에는 위의 예시처럼 count()라는 함수를 사용할 수 있다. 행의 개수를 세어주는 함수다. *은 모든 행을 뜻한다. distinct는 중복된 값을 제외한다. sum()도 이름과 같이 해당 열의 모든 행 값의 합을 구한다. select cust_id, count(distinct sales_dt) as sales_count, min(str_to_date(sales_dt, "%Y%m%d")) as first_sale, max(str_to_date(s..
abbiddo
SO YOUNG & RICH