
입력 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다. 출력 첫째 줄에 옮긴 횟수 K를 출력한다. 두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다. 하노이탑 문제는 유명한 '재귀 문제'인데 N을 1에서 부터 4 정도까지 증가 시켜보면서 Hanoi(n) = 2 × Hanoi(n-1) + 1

Collection의 list, set , map의 특징을 간단히 알아보자. List는 중복을 허용하며 순서가 있다는 특징이 있다. Set은 중복을 허용하지 않으며 순서가 없다.(인덱스가 없다) Map은 Key, Value방식으로 관리한다. 코틀린의 Collection은 선언할때 변경 불가능하게 또는 변경 가능하게 설정이 가능하며 변경 불가능하게 선언할때는 배열과 마찬가지로 val 컬랙션이름 = 컬랙션타입(값1, 값2, 값3 ,...) 이런 형식을 갖는다. 변경 가능하게 선언할때는 val 컬랙션이름 = mutable컬랙션타입(값1, 값2, 값3 ,...) 컬랙션 타입 앞에 mutable을 붙여 주면 된다.

코틀린의 배열 선언 방법은 var 배열이름 = arrayOf(값1, 값2, 값3, ...) 이고 자료형을 선언하지 않는다면 값의 자료형이 아무거나 들어가도 상관없다. +1 ) arrayOf 앞에 자료형을 써서 좀더 명시적으로 선언할 수 도 있다. 자료형ArrayOf(값1, 값2, 값3) ex) IntArrayOf(값1, 값2, 값3) +2 ) lambda를 이용해서 Array( 배열크기 , {값1, 값2 ..} 이렇게 도 선언할 수 있다고 한다. 선언된 배열의 값을 꺼내는 방법은 c, c++ 처럼 배열이름[인덱스값] 으로 꺼낼 수 있고 배열이름.get(인덱스값)으로 꺼낼 수 있다. 선언된 배열의 값을 바꾸는 방법은 c,c++ 처럼 배열이름[인덱스값] = 바꿀 값 으로 바꿀 수 있고 배열이름.set(인덱스..

코틀린의 특징에서 코틀린은 null에 중점을 많이둔 언어이다. 그래서 코틀린은 "엘비스 연산자" 라는 c,c++의 삼항연산자 같은(코틀린에서는 삼항연산자가 없다.) 식이 있는데 엘비스 연산자 (형식): val 변수이름(2) = 변수이름(1) ?: 값 - 변수이름(1)이 null이면 값을 변수이름(2)에 대입하고 null이 아닌경우 변수이름(1)을 변수이름(2)에 대입하라는 의미 이다. when 구문 (형식): when(변수이름) { 값지정1 -> 문장1 값지정2 -> 문장2} - 변수이름이 값지정1이 맞으면 문장1을 실행시키고 변수이름이 값지정2가 맞으면 문장2를 실행시켜라 라는 의미의 구문이다. c나 c++에서 if else구문과 같은데 더 간편하다. is 키워드 (형식): 변수이름 is 자료형 - 변..

코틀린 함수 선언시 키워드는 fun 이며 변수 자료형 지정시와 마찬가지로 함수 이름 뒤에 반환 값의 자료형을 설정해준다. fun 함수이름(매개변수1이름 : 자료형(매개변수1) , 매개변수2 이름 : 자료형(매개변수2) , ...) : 자료형(함수 반환값) {함수 내용} 함수 반환값이 없는 경우 Unit(c,c++에서의 void)으로 지정해주며 굳이 안 적어도 된다. 매개변수가 여러개인경우 매개변수 이름 앞에 varang이라는 키워드를 적어주면 된다.

1. 널 안정성 : 변수 지정시 nullable을 설정할 수 있다. - 타입선언뒤에 ?를 통해 null이 될 수 있음을 표시. ? 붙이지 않으면 null이 될 수 없다. 2. 문법이 간결하며, 표현력이 좋다. - 기존 c나 c++ 에서는 문장뒤에 ;(세미콜론)이 붙는데 코틀린은 붙일 필요가 없으며 객체 생성 또한 new 키워드 없이 생성 가능하다. 3. 기존 라이브러리와 상호 운용성이 좋다. - 2017년에 코틀린이 안드로이드 공식지원언어로 채택되었는데 그 전까지 모든 코드들이 자바로 짜여져있다. 그러나 코틀린은 자바와 100% 호환이 가능하다.