반응형

백준 사이트에서 코틀린으로 문제를 풀기 시작했는데, 스물 다섯 문제를 풀면서 느꼈던 기본적인 중요한 것들을 적었다.

알고리즘을 '알'자도 모르는 수준이며 기본적인 문제들만 풀어봤다.

 

1. 입력받기

val br = BufferedReader(InputStreamReader(System.`in`))
val n = br.readLine().toInt()

BufferedReader를 사용해서 입력 값들을 받아야 한다. Scanner보다 BufferedReader가 더 빠르다고 한다. 필자는 Java로 알고리즘을 해본 적이 없어서 처음 알았는데, 기존에 Java를 하셨던 분이라면 알 수도 있을 것 같다. 아무튼 BufferedReader로 입력 값을 받아야 속도를 올릴 수 있으며, 이는 시간 안에 풀 수 있고 없고를 당락지을 수 있으므로 꼭 사용해야 한다. 두 번째 줄은 숫자 하나를 입력 받는 것이다. 

 예를 들어 입력이 

 3

 이렇게 하나였다면 위처럼 입력받을 수 있다.

 

그런데 만약 한 줄에 두 개 이상의 수가 띄어쓰기를 하며 들어왔다면 어떻게 해야 할까?

두 가지 경우로 나뉠 수 있는데, 첫 째는 i)번처럼 (n,m)을 입력받는 다던지 배열에 저장할 값들이 아닌 경우와, 두번 째는 입력된 값들을 배열에 저장할 때다.

i) 4 -1 과 같이 입력된 경우

    val (n, m) = br.readLine().split(' ').map { it.toInt() }

 이렇게 값을 입력받으면 된다. 들어온 값을 띄어쓰기 기준으로 split하고, 다시 toInt()로 Int형식으로 바꾸는 것이다.

    val (a, b, c) = br.readLine().split(' ').map { it.toInt() }

 이렇게 세 개의 수도 입력받을 수 있다.

 

ii) 1 1 0 1 1 0 0 1 1 0 1 1 0 과 같인 입력된 경우

    var list = br.readLine().split(' ')

 위 (a,b,c)를 입력받았던 것처럼 그냥 나눠주기만 하면 된다. 그러면 자동으로 list[0]부터 list[list.size-1]까지 값들이 저장된다.

 

2. 출력하기

 출력할 때도 자바에서 사용했던 라이브러리를 사용해야하는데 이것은 StringBuilder다. (참고. 위에서 입력받을 때 BufferedReader를 사용했는데, 출력할 때 BufferedWriter를 사용해도 된다. BufferedWriter 또한 시간 단축에 용이하다.) 나는 StringBuilder가 익숙해지고 사용하기 그닥 어렵지 않아 StringBuilder를 사용한다. 

val sb = StringBuilder()
for(i in 0..10000){
	sb.append("0\n")
}
println(sb)

 이렇게 사용할 수 있다. StringBuilder에 출력할 값들을 추가해 둔 후 마지막에 한 번에 출력하는 것으로 생각하면 될 것 같다. BufferedReader처럼, StringBuilder 또한 시간 단축에 효과적이어서 출력할 값들이 많을 때는 괜히 한 번 틀릴 것을 맞출 수 있기 때문에 꼭 사용하는 것이 좋다. 

 

3. 2차원 배열

val temp = Array(5){ArrayList<Int>()}
    temp[0].add(3)
    temp[0].add(8)
    temp[0].add(-1)
    for(i in temp[0].indices){
        println(i)
    }

2차원 배열을 첫째 줄처럼 선언할 수 있다. 크기 5의 배열이며 Int형이다. 

여기서 하나 더 중요한 것은 아래의 for문인데, 이렇게 for문을 통해 i를 출력하면 어떤 값들이 나올까? indicies로 하였기 때문에 0,1,2가 출력된다. 

val temp = Array(5){ArrayList<Int>()}
    temp[0].add(3)
    temp[0].add(8)
    temp[0].add(-1)
    for(i in temp[0]){
        println(i)
    }

하지만 위처럼 출력한다면 3,8,-1이 출력된다. indices를 붙여주는 것과 붙여주지 않는 것은 큰 차이가 있으므로 조심하자.

반응형

+ Recent posts