반응형

분류 전체보기

반응형
반응형

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

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

 

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