Java -> Kotlin 으로 코딩테스트 언어 바꾸기

Android Chen·2022년 3월 1일
1

코틀린으로 코딩테스트 보기

저는 지금까지 취업준비를 하며 코딩테스트 준비를 할때 JAVA를 사용하며 주로 IDE없이도 코딩테스트를 합격할 수 있어야 한다고 생각하고 IDE없이 프로그래머스, 백준 사이트 자체에서 코드를 작성하고 제출했습니다. 주로 네이버 계열사 코딩테스트에서 IDE사용을 금지하는 경향이 있습니다.

안드로이드 네이티브 개발자로 공부해나가는 과정에서, 개발에 주로 사용하는 언어가 코틀린이고 이번에 웍스모바일에서 안드로이드 인턴으로 2개월 근무해본 결과, 코딩테스트는 자바로 응시하고 개발은 코틀린으로 하는것이 쉽지는 않았습니다. 따라서 훨씬 간결한 문법을 사용하는 코틀린으로 코딩테스트를 새로 준비하는것이 장기적으로 훨씬 좋을 것 같다고 생각했습니다. 이 과정에서 주로 필요한 코틀린의 문법들을 정리하려고 합니다.

안드로이드 개발자로 채용될 때, 또는 네카라쿠배등의 대기업의 공채는 대부분 코틀린을 지원합니다. 간혹 C++, Python, Java만 허용하거나 이중 일부만 허용하는 기업도 있습니다만 우선 안드로이드를 기준으로 공부해보려 합니다.

입력

fun main() = with(System.`in`.bufferedReader()){
	//정수 1개 읽기
    val num = readLine().toInt()
    
    //공백 기준으로 정수 여러개 읽기
    val nums = readLine().split(" ").map {it.toInt()}
    
    //문자열을 char배열로 받기
    val charArray = readLine().toCharArray()
}

자바와 마찬가지로 bufferedReader를 이용할 수 있습니다. 기존 자바에 비해 with문으로 훨씬 간결하게 사용 가능합니다.

기존 자바 문법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in))

출력

fun main() = with(System.`in`.bufferedReader()){
	//기본 출력
    print("hello")
    
    //bufferedWriter를 사용한 출력
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    bw.appendLine()
    bw.flush()
    bw.close()
   	
    //출력 템플릿
    val s = "test"
    println("$s.length is ${s.length}") //"test.length is 4"
}

자료구조

배열

코틀린으로 코딩테스트를 준비할 때 자바와 가장 다른점이라 하면 저는 배열 선언에서의 차이라고 느꼈습니다. 유일하게 자바에 비해 조금 불편함이 있습니다. 아래 템플릿을 고정으로 암기하고 사용하는것이 좋다고 생각하여 정리합니다.

기본 배열

val arr = intArrayOf(1,2,3)

확장 함수로 배열 생성

val arr = IntArray(4) {it}

//배열 전체 출력
print(arr.contentToString()) // 결과 [0, 1, 2, 3]

val arr = IntArray(4) {it * 2} // [0, 2, 4, 6]

다차원배열

다차원 배열 선언이 자바와 달라 조금 불편한 감이 있습니다.


val arr = Array(n) {
	BooleanArray(m) { false }
}

List

코틀린은 list와 mutableList가 있기 때문에 변경이 필요한 경우에는 MutableList를 활용해야 합니다.

기본 리스트


val list = listOf(1, 2, 3)

스택

MutableList를 활용하면 스택을 구현할 수 있습니다. 굳이 자바의 라이브러리를 사용하지 않아도 됩니다.


val numbers = mutableListOf(1, 2, 3, 4)
val stack = MutableList<Int>(4) { it } 

stack.push(5)
numbers.add(5)

stack.pop()
numbers.removeLast()

stack.peek()
numbers.last()

numbers.isEmpty()

numbers.isNotEmpty()

numbers.size

큐는 ArrayList대신 LinkedList를 가져와서 이용합니다.

val q = LinkedList<Int>()
q.offer(3)
q.poll()
q.peek()

데크

데크는 ArrayDeque를 가져와서 활용합니다.

val deque = ArrayDeque<Int>()ections.ArrayDeque

addLast, offerLast, removeFirst, pollLast, peekList 등의 메소드를 활용하면 됩니다.

profile
https://github.com/Userz1-redd

0개의 댓글