개인 공부/Algorithm
[Algorithm] 코틀린 알고리즘 문제풀이 팁 사이트 모음
참깨빵위에참깨빵_
2023. 1. 10. 00:53
728x90
반응형
검색하기 귀찮아서 따로 모았다. 자세한 내용은 해당 링크로 들어가서 확인하면 될 것 같다.
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
한 줄에 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
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 {} : 리스트 안의 인자 중 조건에 일치하는 인자만 필터링
반응형