https://www.acmicpc.net/problem/5568 5568번: 카드 놓기 문제 상근이는 카드 n(4 ≤ n ≤ 10)장을 바닥에 나란히 놓고 놀고있다. 각 카드에는 1이상 99이하의 정수가 적혀져 있다. 상근이는 이 카드 중에서 k(2 ≤ k ≤ 4)장을 선택하고, 가로로 나란히 정수를 만들기로 했다. 상근이가 만들 수 있는 정수는 모두 몇 가지일까? 예를 들어, 카드가 5장 있고, 카드에 쓰여 있는 수가 1, 2, 3, 13, 21라고 하자. 여기서 3장을 선택해서 정수를 만들려고 한다. 2, 1, 13을 순서대로 나열하면 www.acmicpc.net nCr 을 이용하여 가능한 조합의 수를 찾는 문제입니다. DP로 풀 수 도 있긴 하지만, 저는 완전탐색이 편하기 때문에 완탐으로 풀었습니..
Spring 4.3이상부터는 @Autowired라는 Annotation을 통해 빈을 주입 받을 수 있게 된다. (단, 생성자가 없고, 해당 객체가 IoC Container에 Bean으로 포함된 경우에만) 3가지 빈 주입 방법 생성자 , 필드, 세터 스프링 Reference에서 권장하는 방법은 '생성자' 다. 왜냐하면 필수적으로 객체가 인스턴스화 될때 생성자를 통해 생성되어야 하기 때문에, 생성자를 통해 DI를 강제 하는 것이 가장 이상적이다. 특이한 경우가 있는데 만약 두개의 객체가 서로 생성자를 통해 Injection 되는 경우 마치 데드락 상태처럼 Circular Injection이 발생해서 객체를 생성할 수 없게 된다. 이러한 경우에는 Filed Injection이나 Setter Injection을..
Inversion of Control (IoC) 제어권이 역전된다. 일반적인 제어권 : "내가 사용할 제어권은 내가 만든다" class OwnerController{ private OwnerRepository repository = new OwnerRepository(); } IoC "내가 사용할 의존성을 누군가 주겠지" class OwnerController{ private OwnerRepository repo; public OwnerController(OwnerRepository repo){ this.repo = repo; } } 제어권이 역전되었다. 의존성을 주입하는 것을 "dependency injection"라고 한다. Bean이란? 스프링이 관리하는 객체 스프링 컨테이너 안에 빈들의 의존성을 ..
?와 !!의 차이 코틀린에서는 기본적으로 null을 허용하지 않는다. 그렇기 때문에 var str : String = null을 하게 될 경우 오류를 발생시킨다. 하지만, var str: String? = null, 즉 ?를 넣게 될 경우 null을 받아준다. type 뒤에 ?를 붙이는 것은 엄밀히 다른 클래스이다. 또한 str.tostring()의 경우에도, str?.tostring() 을 해야 null이 아니라면 뒤의 함수를, null이라면 null을 반환하는 안전한 연산자를 제공해준다. 만약 다음 코드가 절대 null이 발생하지 않음을 코틀린 컴파일러에게 알려주려면 !!을 사용하면 된다. 이렇게 하면 강제로 not null 처리를 해줄 수 있다. Elvis operator ?. 연산자는 좌항이 nu..
작심 4일이 될 느낌 확장 함수 fun 확장대상.함수이름(매개변수 ...) : 반환값 { ..., return 값 } 이미 정의된 클래스에 함수를 더 추가할 수 있는 확장함수 기능을 코틀린에선 제공한다 (매우 편리할듯?) 중위 함수 클래스의 멤버를 호출할때 사용하는 점(.)을 생략하고 함수 이름 뒤에 소괄호를 붙이지 않아 직관적인 이름을 사용할 수 있는 표현법 비트연산자에서 주로 사용함. infix 키워드를 붙여야함 멤버 메서드 또는 확장함수여야 한다. 하나의 매개변수를 가져야 한다. 꼬리 재귀 함수 코틀린에서는 일반적으로 Tail Recursive Function 이라는 것을 제공한다. 꼬리 재귀함수라고 하는데, 이 꼬리 재귀함수는 스택에 계속 쌓이는 방식이 아니라 꼬리를 무는 형태로 만복된다. 일반적..
코틀린에서는 자바의 인터페이스나 익명 객체 없이 람다식 형태로 콜백메소드를 구현할 수 있다. 코틀린의 익명함수 fun(x: Int, y:Int) : Int = x + y // 함수 이름이 생략된 익명 함수 var add = fun(x: Int, y:Int) : Int = x + y로 표현 가능하다. 이는 var add = { x: Int, y: Int -> x+y }로도 표현 가능 람다식이 있는데 굳이 왜 익명함수를 쓸까? 람다식에서는 break나 return, continue같은 흐름 제어문을 사용하기 어렵기 때문이다. 만약 람다식으로도 표현이 가능하다면, 람다를 사용하는 것이 좋고 흐름제어가 필요하다면 익명함수를 쓰자 인라인 함수 일반 함수의 로직 처리 fun main() sub() // 1번 sub..
var과 val의 차이 var은 계속 변경 가능 val은 "단 한번" 초기화 하면 그 다음부터는 절대 변경 불가능 코틀린의 null 처리 코틀린에서는 null을 사용할 수 없음. var str:String = null ==> X var str:String? = null ==> O String과 String?는 다른 자료형임. Str1?.length ? : -1 ?:는 evlis 연산자로써 null이 아니면 왼쪽 null이면 오른쪽 ( 마치 삼항연산자 ) 코틀린의 형변환 자바에서는 자동으로 형변환을 해주지만 코틀린에서는 형변환 메서드를 사용해야함. var a : Int = 1 var b : Double = a // 오류! b = a.toDouble() // OK! 기본형과 참조형의 자료형 비교 원리 값 비..