Uknow's Lab.
article thumbnail

 

https://www.acmicpc.net/problem/2953

 

2953번: 나는 요리사다

"나는 요리사다"는 다섯 참가자들이 서로의 요리 실력을 뽐내는 티비 프로이다. 각 참가자는 자신있는 음식을 하나씩 만들어오고, 서로 다른 사람의 음식을 점수로 평가해준다. 점수는 1점부터 5

www.acmicpc.net

 

난이도 : 브론즈 3
태그 : 수학, 구현, 사칙연산

 

 

설명

5명의 참가자의 점수의 총합 중, 가장 높은 점수와 몇 번째 참가자인지 찾는 문제입니다.

 

소스코드

fun main() = with(System.`in`.bufferedReader()) {
    val arr = Array(5) { readLine().split(" ").map { it.toInt() }.toTypedArray().sum() }
    val max = arr.maxOrNull()!!
    println("${arr.indexOf(max) + 1} $max")
   
}

 

Array(5) { it -> (내용) } 과 같이 코틀린 람다식을 이용한 배열 선언과 동시 초기화를 사용할 경우, 입력받는 코드를 단축할 수 있습니다.

 

readLine()으로 한 줄을 입력받고, split(" ")을 이용해 공백으로 구분해 리스트로 만든 다음,

map을 사용해 각각의 원소에 접근합니다.

각각의 원소(it)에 .toInt()를 함으로써 각각의 원소를 가공한(int형으로) 리스트를 반환받습니다.

List 형에서는 .sum()을 사용한 간단한 덧셈이 불가능하므로, toTypedArray()를 사용해 배열 타입으로 변환받고,

sum()을 사용해 배열의 합을 arr 안에 저장합니다.

 

이후, arr.maxOrNull()을 사용해 배열 내 최댓값을 가져옵니다.

max()를 사용하면 왜 인지 모르겠지만 백준에서 에러가 발생하여 maxOrNull을 사용해 받아온 다음, nullable 함을 제거하기 위해 !! 연산자를 사용합니다.

 

이후, arr.indexOf(max)를 통해 몇 번째 인지 출력하고, 최댓값(max)도 출력합니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.