개인 공부/Algorithm

[Algorithm] 코틀린 알고리즘 문제풀이 팁 사이트 모음

참깨빵위에참깨빵_ 2023. 1. 10. 00:53
728x90
반응형

검색하기 귀찮아서 따로 모았다. 자세한 내용은 해당 링크로 들어가서 확인하면 될 것 같다.

 

https://velog.io/@blucky8649/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%BD%94%ED%8B%80%EB%A6%B0%EC%97%90%EC%84%9C%EC%9D%98-%EC%9E%85%EB%A0%A5%EA%B0%92-%EC%B2%98%EB%A6%AC-%EB%B0%A9%EB%B2%95-feat.-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EA%BF%80%ED%8C%81

 

[코틀린] 코틀린에서의 입력값 처리 방법 feat. 알고리즘 문제풀이 꿀팁

백준 알고리즘 문제를 풀려면 주어지는 입력값에 대한 처리를 해야합니다.따라서 이번 포스팅은 주어지는 입력값 처리 방법에 대해서 알아볼게요.백준 문제를 푸실 때, 대부분 Scanner와 BufferedRea

velog.io

Scanner 장점
- nextInt(), nextLine() 등으로 입력받은 값의 자료형을 쉽게 지정할 수 있다
- 띄워쓰기로 구분된 Integer도 nextInt()로 가공할 수 있다

Scanner 단점
- 키보드 입력을 바로 전송하는 원리라서 느리다

BufferedReader 장점
- 버퍼에 저장해놓고 전송하는 방식이라 빠름

BufferedReader 단점
- 수많은 보일러 플레이트 코드 존재
- 띄어쓰기로 구분된 값을 가공하는 등 경우에 따라 StringTokenizer를 써야 함

결론 : BufferedReader 써라
import java.util.StringTokenizer

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val arr = ArrayList<Int>()
    val st = StringTokenizer(readLine())

    while (st.hasMoreTokens()) {
        arr.add(st.nextToken().toInt())
    }
    println("Contents Of an Array: $arr")
}
// input: 10 20 30 40 50
// output: Contents Of Array: [10, 20, 30, 40, 50]
BufferedReader는 readln()을 써서 더 간결하게 구현할 수 있다. 이걸 쓰면 with()을 쓰지 않아도 된다
fun main(args: Array<String>)) {
    val name = readln()
    val age = readln().toInt()

    println("name: $name, age: $age")
}
첫 줄에 점의 개수, 그 다음줄부터는 x, y좌표를 차례대로 입력받는 코드가 있을 때 StringTokenizer를 쓰지 않고 람다식으로 간결하게 표현 가능하다

fun main(args: Array<String>) {
    val n = readln().toInt()
    val dots = ArrayList<Dot>()
    repeat(n) {
        val (x, y) = readln().split(" ").map { it.toInt() }
        dots.add(Dot(x, y))
    }
    println(dots)
}
data class Dot(val x: Int, val y: Int)

// output: [Dot(x=0, y=0), Dot(x=0, y=1), Dot(x=3, y=4), Dot(x=5, y=7)]

 


 

https://wonnyhouse.tistory.com/246

 

코틀린으로 알고리즘 풀 때 기본 팁

백준 사이트에서 코틀린으로 문제를 풀기 시작했는데, 스물 다섯 문제를 풀면서 느꼈던 기본적인 중요한 것들을 적었다. 알고리즘을 '알'자도 모르는 수준이며 기본적인 문제들만 풀어봤다. 1.

wonnyhouse.tistory.com

한 줄에 2개 이상의 수가 띄어쓰기를 하며 들어왔다면 어떻게 해야 하는가? 첫째는 (n, m)을 입력받는다던지 배열에 저장할 값들이 아닌 경우, 둘째는 입력된 값들을 배열에 저장할 때다

4-1처럼 입력된 경우 아래처럼 값을 입력받으면 된다. 들어온 값을 띄어쓰기 기준으로 split()하고 toInt()로 Int로 바꾸는 것이다
val (n, m) = br.readLine().split(' ').map { it.toInt() }
3개의 수도 입력받을 수 있다
val (a, b, c) = br.readLine().split(' ').map { it.toInt() }
1 1 0 1 1 0 0 1 1 처럼 입력된 경우 그냥 split()만 쓰면 된다
var list = br.readLine().split(' ')
2차원 배열을 첫째 줄처럼 선언할 수 있다. 크기 5의 배열이며 Int형이다. 아래처럼 for문을 쓰면 indices를 썼기 때문에 인덱스가 출력된다
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)
}
아래처럼 짜면 인덱스의 값들이 출력된다
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)
}

 


 

https://gyubgyub.tistory.com/3

 

[ 알고리즘 / kotlin ] 알고리즘 문제에 도움이 되는 코틀린 문법 1

정말 기초 문법이기에 코틀린 언어가 익숙하지 않으신 분들에게 유용할 것 같습니다 [ when ] : 자바에서 switch문과 유사합니다 val price = when(foodName){ FOOD_CREAM_PASTA -> 13000 FOOD_STEAK -> 25000 FOOD_PIZZA -> 15

gyubgyub.tistory.com

for (i in 0..9) : i가 0~9까지 총 10번 반복
for (i in 0..9 step 3) : i가 0~9까지 3씩 증가
for (i in 9 downTo 0) : i가 9~0까지 감소
for (i in 'a'..'e') : i가 'a'부터 'e'까지 증가
for (i in 1 until 100) : i가 1부터 99까지. 뒤 숫자에 -1한 숫자까지만 반복됨

forEach {} : 리스트의 요소들을 하나씩 꺼내 반복처리
map {} : 컬렉션 안의 인자들을 변환해서 반환
mapIndexed {} : 컬렉션에 포함된 인자의 인덱스 값을 변환해서 사용
filter {} : 리스트 안의 인자 중 조건에 일치하는 인자만 필터링
반응형