PS문제를 하나씩 풀다보니 공부가 필요한 문법에 대해서 정리한 글입니다.
우리가 PS 문제를 해결하다 보면 배열을 자주 사용하게 될 것입니다.
이에SumOf함수를 사용하면 반복문을 사용하지 않아도
쉽게 총합을 계산할 수 있을 것 입니다.
SumOf함수는 말 그대로 배열에 있는 모든 요소들을 더해서 반환해주는 함수입니다.
inline fun IntArray.sumOf(selector: (Int) -> Int): Int
공식문서 속에서도 컬렉션 타입에
.sumOf()의 함수를 적용시켜 선택자의 타입에 따라
총 합도 그 선택자를 따라가는 것을 확인할 수 있습니다.
fun main(){
val arr = intArrayOf(2,4,6,8,10)
//일반 반복문
var sum = 0
for(x in arr){
sum += x
}
println("배열의 총합 : $sum")
//sumOf
val sumOf = arr.sumOf { it }
println("배열의 총합 : $sumOf")
}
다음 예제는 배열 하나가 주어졌을 때 배열의 총합을 구하는 방법을 작성한 코드입니다.
반복문을 사용한 것보다 가독성 좋다는 것을 확인할 수 있습니다.
그렇다면 배열에서 최소, 최대를 찾는 함수는 무엇일까요?
바로minOf,maxOf함수 입니다.이름 그대로 최소 값, 최대 값을 찾을 수 있습니다.
해당 문제를 위 함수로 풀면 활용할 수 있을 것 같으니
이 문제로 예시를 들어봅시다.
해당 문제는 N개의 정수를 받으면
이 때 최솟값과 최댓값을 출력하여 구하는 프로그램을 작성하는 문제입니다.
import java.io.StreamTokenizer
fun main() = with(StreamTokenizer(System.`in`.bufferedReader())){
fun nextInt() : Int { nextToken(); return nval.toInt() }
val n = nextInt()
val arr = IntArray(n) { nextInt() }
val min = arr.minOf { it }
val max = arr.maxOf { it }
print("$min $max")
}
1. 입력을 받아준다.
2. min, max를 구하기 위해 minOf, maxOf 함수를 사용하여 구한 뒤
3. 출력을 해줍니다.
배열에서의 총 합, 최소, 최대의 코드들을 가독성을 좀 더 올려주는 함수를 알아보았습니다.
PS 문제에서 잘 활용해 봅시다.