Algorithm :: 집합의 표현 (union-find)

백준 문제 : (1717) 집합의 표현
알고리즘 : Union-Find

문제 정리

  1. 집합 n+1개 ({0},{1},{2},…{n})
  2. 첫 줄에 n과 m이 주어짐
  3. n은 집합의 개수이며 m은 라인
  4. 각 라인은 [0 1(a) 3(b)], [1 7 1]가 같이 3개의 숫자를 전달
  5. 맨 앞의 숫자 0은 a와 b를 합치며 1은 두 집합이 같은 집합인지 판단하여 “YES, “NO”를 출력

Algorithm :: Maximum Subarray

Maximum Subarray

[Leetcode :: Maximum Subarray]
정수 배열 nums를 지정하면 합계가 가장 큰 연속적인 하위 배열(최소 1개를 포함)을 찾아 합계를 반환하십시오.

접근 방법

Brute Force

주어지는 배열은 A = [-2, 1, -3, 4, -1, 2, 1, -5, 4]로 구성돼 있다.
문제를 보면 하나의 배열안에 하위 배열들의 합을 구하는 것이라 단순하게 생각해도 반복문 2개로 풀 수 있을 것이다. A[0]부터 시작되는 하위 배열들부터 A[1]~A[N-1]로 시작하는 하위 배열들의 합 중에서 제일 큰 걸 고르면 되는데 이렇게 작성을 하면 시간 복잡도는 O(n^2^)으로 너무 느려진다.

Kotlin :: 클래스, 객체, 인터페이스 2

클래스, 객체, 인터페이스 1에 이어 클래스, 객체, 인터페이스2 를 시작한다.

클래스 선언

코틀린에서는 생성자를 주 생성자(primary constructor)부 생성자(secondary constructor)로 나눈다. 주 생성자는 단 한번만 선언할 수 있으며 부 생성자를 여럿 선언할 수도 있다.

Regex :: 유용한 정규표현식 샘플 with Java

정규표현식

정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp 또는 regex, rational expression) 또는 정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 정규 표현식은 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원하고 있으며, 특히 펄과 Tcl은 언어 자체에 강력한 정규 표현식을 구현하고 있다. (출처 : 위키피디아)

Docker :: 중지 된 모든 컨테이너 한 번에 삭제하기

배경

데브옵스 한다고 CI/CD 구축해놓고 Release 브랜치에 푸시 할 때 태그정보로 이미지를 만들고 그대로 컨테이너로 생성하여 특정 호스트에 배포를 하고 있었다. 개발기였기 때문에 별 문제 없이 사용했었는데 우연찮게 도커 클라이언트에 있는 컨테이너 정보를 모두 호출했다가 중지 된 수십 개의 컨테이너가 있는 걸 발견했다.

Git 배포 시 Contribution이 올라가지 않을 때

배경

1일 1커밋을 실천하다가 우연찮게 내 Github 페이지를 봤는데 이상하게 Contribution에 예쁜 녹색이 찍혀있지 않은 걸 발견했다.

아.. 부끄러운 내 기록..

최소한 끝에 녹색이 연속적으로 찍혔어야 했는데 찍히지 않은걸 발견하고 뭔가 잘못된 걸 직감했고 나는 바로 그 원인를 찾아야 했다.

[Kotlin] 클래스, 객체, 인터페이스 1

코틀린 인터페이스

코틀린 인터페이스는 자바8과 비슷하게 추상 메소드 뿐만 아니라 구현이 있는 메소드도 정의할 수 있다. 다만 인터페이스에는 아무런 상태(필드)도 들어갈 수 없다.

1
2
3
4
5
6
7
8
interface Clickable {
fun click()
fun showOff() = println("I'm clickable")
}

class Button : Clickable {
override fun click() = println("I' was clicked")
}
  • 콜론(:)을 붙여 클래스 확장과 인터페이스를 구현 모두를 처리한다.
  • override변경자는 @Override 애노테이션과 동일하게 오버라이드 표시를 하지만 오버라이드 시 반드시 사용해야 한다.
  • showOff와 같이 디폴트 함수를 제공한다.

함수 정의와 호출 2

함수 정의와 호출 1에 이어 함수 정의와 호출 2를 시작한다.


확장 프로퍼티

확장 프로퍼티를 사용하면 기존 클래스 객체에 대한 프로퍼티 형식의 구문으로 사용할 수 있는 API를 추가할 수 있다. 확장 프로퍼티로 작성하면 아무 상태도 가질 수 없지만 (확장 함수와 같다) 코드를 더 짧게 작성할 수 있어서 편한 경우가 있다.

1
2
val String.lastChar: Char
get() = get(length - 1)

함수 정의와 호출 1

코틀린에서 컬렉션 만들기

코틀린에서는 코틀린만의 컬렉션을 만들지 않고 모두 자바의 컬렉션은 그대로 사용하고 추가적인 함수를 제공하고 있다. 컬렉션을 만들 때엔 대체적으로 컬렉션명 + Of의 조합이다.

1
2
3
4
5
6
7
8
9
10
val set = hashSetOf(1, 7, 53)
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three")

>>> println(set.javaClass)
class java.util.HashSet
>>> println(list.javaClass)
class java.util.ArrayList
>>> println(map.javaClass)
class java.util.HashMap

[Kotlin] 코틀린의 기초 2

코틀린의 기초 1에 이어 코틀린의 기초 2를 시작한다.


선택 표현과 처리: enum과 when

enum 클래스 정의

코틀린에서 enum은 소프트 키워드라 부르는 존재이다. enum은 class앞에 있을 때는 특별한 의미를 지니지만 다른 곳에서는 이름에 사용할 수 있다. 반면 class는 키워드이므로 이름으로 사용할 수 없다.

자바와 마찬가지로 enum은 단순히 값만 열거하는 존재가 아니다. enum 클래스 안에도 프로퍼티나 메소드를 정의할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
enum class Color (
val r: Int, val g: Int, val b: Int
) {
RED(255, 0, 0), ORANGE(255, 165, 0),
YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255),
INDIGO(75, 0, 130), VILOET(238, 130, 238);

fun rgb() = (r * 256 + g) * 256 + b
}

>>> println(Color.BLUE.rgb())
255
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×