Open Tianea2160 opened 1 year ago
코테문제 https://www.acmicpc.net/problem/1931 https://www.acmicpc.net/problem/1456 https://www.acmicpc.net/problem/1325
val list: ArrayList<Pair<String, Int>> = arrayListOf("hello" to 1, "world" to 2, "jhj" to 3)
import java.util.ArrayList
fun main() {
// second를 기준으로 내림차순으로 정렬하시오.
val list: ArrayList<Pair<String, Int>> = arrayListOf("hello" to 1, "world" to 2, "jhj" to 3)
list.sortBy { -it.second }
list.sortByDescending { it.second }
println(list.joinToString(","))
// first를 기준으로 내림차순으로 정렬하시오.
list.sortByDescending { it.first }
println(list.joinToString(","))
}
class Point(
val a: Double,
val b: Double
) {
operator fun times(value: Double): Point = Point(a * value, b * value)
override fun toString(): String = "Point(a=$a, b=$b)"
}
fun main() { val p1 = Point(10.0, 20.0) println(p1) val p2 = p1 2.0 val p3 = 2.0 p1 println(p2) println(p3) }
<details>
<summary>answer</summary>
```
class Point(
val a: Double,
val b: Double
) {
operator fun times(value: Double): Point = Point(a * value, b * value)
override fun toString(): String = "Point(a=$a, b=$b)"
}
operator fun Double.times(p: Point) = Point(p.a * absoluteValue, p.b * absoluteValue)
fun main() {
val p1 = Point(10.0, 20.0)
println(p1)
val p2 = p1 * 2.0
val p3 = 2.0 * p1
println(p2)
println(p3)
}
```
</details>
3. by lazy 키워드와 lateinit 키워드의 차이점과 각각 언제 사용하면 좋은지 이야기하시오.
<details>
<summary>answer</summary>
lateinit은 말그대로 현재는 아무런 값도 넣지 않지만 나중에 반드시 넣겠다는 의미입니다. 따라서 추후에 값을 초기화하지 않으면 예외가 발생하며 개인적으로 개발자의 실수가 용인될 수 있기 때문에 사용을 피해야한다고 생각합니다.
lazy by는 이미 무엇을 선언할 지 모두 결정되었지만 해당 객체의 생성만 뒤로 미루는 키워드입니다. 따라서 처음 프로그램을 동작시킬때 너무 많은 부하가 걸린다면 해당 키워드를 이용해서 부하를 늦출 수 있습니다. 마치 프록시의 역할을 언어차원에서 어느정도 대신하다고 볼 수 있습니다.
구체적인 사용예시로 안드로이드 어플을 만들때 여러 객체를 화면 생성시에 만드는 경우가 발생하는데 이때에 lazy by를 써서 핸드폰의 부하를 줄일 수 있습니다.
</details>
### 코테 문제
https://www.acmicpc.net/problem/2108
https://www.acmicpc.net/problem/2563
https://www.acmicpc.net/problem/2738
### 토이 프로젝트 주제
- 기숙사 공지 모니터링 서버
이번주는 개인적으로 바빠서 코테는 못풀었습니다 ㅠㅠ 차차 추가할게요. 토이 프로젝트 주제는 멤버십 포인트 적립 서비스 서버
타입과 람다의 방
fun myFunction(){
println("no error")
}
val yourFunction = {
println("your function")
}
// 1-1. 빌드가 된다 (O/X)
fun test_1() = (::myFunction)()
// 1-2. 빌드가 된다 (O/X)
val test_2 = ::myFunction
// 1-3. 빌드가 된다 (O/X)
val test_3 = run(myFunction)
// 1-4. 빌드가 된다 (O/X)
val test_4 = if (::myFunction is KFunction<*>) ::myFunction else ::yourFunction
// 1-5. 빌드가 된다 (O/X)
val test_5 = if (::myFunction is () -> Unit) ::myFunction else ::yourFunction
코드는 위 Section 1에 계속 이어서...
fun main(){
// 2-1. 실행이 된다 (O/X)
println(test_4)
// 2-2. 실행이 된다 (O/X)
test_4()
// 2-3. 실행이 된다 (O/X)
run(test_5)
// 2-4. 실행이 된다 (O/X)
run(::test_5)
}
이걸로 학교 공지 사진이랑 내용 API처럼 반환해주는거 하고 싶은 나중에 쓸 일 많을거 같음
오늘 참석 못함
누나 해외 출장 귀국했다고 + 설 앞둔 기념으로 예약 잡아놨다고 시간 못뺌 ㅈㅅㅎㅎ
저는 자바에서의 것처럼 런타임시 NPE를 허용하는 것이기 때문이라고 이해했습니다.
null-safe calls 이나 Elvis operator 같은 다른 것들을 선택하는게 좋다고 합니다 https://www.baeldung.com/kotlin/not-null-assertion
class Foo(val name: String) val list = listOf(Foo("Big"), null, Foo("Small")) List<Foo?> list.filter { it != null } .map { it!!.name.toUpperCase() }
자세히
**class Foo(val name: String) val list = listOf(Foo("Big"), null, Foo("Small")) List문제 1.https://www.acmicpc.net/problem/1068 2.https://www.acmicpc.net/problem/1092 3.https://www.acmicpc.net/problem/2805