전체 글

기초가 가장 중요하다
1. Stack(스택)스택은 삽입과 삭제 연산이 후입선출(LIFO : Last-in first-out)로 이뤄지는 자료구조이다. 후입선출은 삽입과 삭제가 한 쪽에서만 일어나는 특징이 있다. 스택 용어위치top : 삽입과 삭제가 일어나는 위치연산push : top 위치에 새로운 데이터를 삽입하는 연산pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산peek : top 위치에 현재 있는 데이터를 단순 확인하는 연산스택은 깊이 우선 탐색(DFS : Depth First Search), 백트래킹 종류의 코딩 테스트에 효과적이므로 반드시 알아 두어야 한다. 후입선출은 개념 자체가 재귀 함수 알고리즘 원리와 일맥상통하기 때문이다. 2. Queue(큐)큐는 삽입과 삭제 연산이 선입선출(FIFO : F..
구간 합 구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘이다. 코딩 테스트에서 사용 빈도가 높으니 꼭 알아두자. 구간 합의 핵심 이론 구간 합 알고리즘을 활용하려면 먼저 합 배열을 구해야 한다. 배열 A가 있을 때 합 배열 S는 다음과 같이 정의한다. S[i] = A[0] + A[1] + A[2] + ... + A[i-1] + A[i] // A[0]부터 A[i]까지의 합 합 배열은 기존의 배열을 전처리한 배열이라 생각하면 된다. 이렇게 합 배열을 미리 구해놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(n)에서 O(1)로 감소한다. 합 배열을 만드는 공식은 다음과 같다. S[i] = S[i - 1] + A[i] i에서 j까지 구간 합을 구하는 공..
> 1. 상속 상속 클래스 선언 형식은 다음과 같다 class [클래스명] : [상속받을 클래스명]() {} 이전 포스팅에서 생성했던 Human 클래스를 상속받는 Korean 객체를 작성해보자 open class Human(val name: String = "Anonymous") { ... } class Korean : Human() {} 상속을 받기 위해서는 상속받을 클래스 앞에 open을 선언해야 한다 자바와 같이 상속은 1개만 받을 수 있다 2. 오버라이딩 open class Human(val name: String = "Anonymous") { ... open fun singASong() { println("lalala") } } class Korean : Human() { override fun..
> 코틀린은 파일 이름과 클래스 이름이 달라도 된다. 하나의 파일 안에 여러 클래스를 넣는것도 가능하다. 1. 클래스 생성과 선언 class Human { val name = "taek" fun born() { println("New human has been born!!") } } fun main() { val human = Human() println("this human's name is ${human.name}") human.born() } 기본적인 클래스 구조이다 2. 생성자 class Human constructor (name: String){ val name = name fun born() { println("New human has been born!!") } } fun main() { v..
> 1. Nullable 코틀린의 가장 큰 장점이라 할 수 있다. 자바로 코딩하다보면 빌드 할 때 NPE(Null Pointer Exception) 오류를 자주 접하게 된다. 오류가 나면 어디서 나는지도 찾아야하고 예외처리를 다 해줘야한다. 코틀린은 컴파일 단계에서 오류를 나타내주기 때문에 빌드할 때 NPE 오류를 접할 일이 없고, null 처리가 간편하다. ? (Nullable Type) fun nullcheck() { var name = "taeki" var nameInUpperCase = name.uppercase() var nullName: String? = null var nullNameInUpperCase = nullName?.uppercase() } 변수를 선언할 때 null을 넣고 싶으면 ..
> 1. for - forEach문 형식 val students = arrayListOf("taeki", "james", "jenny", "jennifer") for(name in students){ println("${name}") } - index를 사용하여 출력하기 for((index, name) in students.withIndex()){ println("${index + 1}번째 학생 : ${name}") } - n에서 m까지 반복 (m 포함) sum = 0 for(i in 1..10){ sum += i } 1~10 - n에서 m까지 반복 (m 미포함) sum = 0 for(i in 1 until 100) { sum+= i } 1~99 - 역순 sum = 0 for(i in 10 downTo ..