연락처 통계
Coddy Kotlin 여정의 논리와 흐름 섹션에 포함된 레슨. 63개 중 25번째.
챌린지
어려움commands: List<String>, names: List<String>, phones: List<String> 매개변수를 사용하여 contactBook을 완성하세요. 각 함수 호출마다 비어 있는 상태로 시작하는 메모리 내 연락처 목록을 만드세요. 세 목록의 길이는 같으며 최대 100입니다. 각 인덱스에서 commands는 연산을 선택하고, names와 phones는 해당 연산의 인수를 제공합니다. 이름은 비어 있지 않은 소문자 ASCII 단어이며, 전화번호는 비어 있지 않은 숫자 문자열이므로 앞에 오는 0을 보존하기 위해 문자열로 유지해야 합니다. 모든 명령은 반환되는 목록에 하나의 응답을 생성합니다. 이전 단계에서 작성한 모든 내용과 이전의 모든 명령 및 응답을 유지하세요. PUT을 지원하세요. 제공된 이름의 전화번호를 저장하거나 교체한 다음 saved로 응답합니다. FIND를 추가하세요. 제공된 이름에 저장된 전화번호로 응답하거나, 없으면 missing으로 응답합니다. 이 명령의 phone 인수는 무시합니다. REMOVE를 추가하세요. 제공된 이름을 삭제하고, 해당 이름이 존재했다면 removed, 그렇지 않으면 missing으로 응답합니다. 이 명령의 phone 인수는 무시합니다. LIST를 추가하세요. 저장된 이름의 정렬된 목록을 Kotlin의 표준 대괄호 형식으로 응답합니다. 예를 들어 [ada, bo]와 같으며, 비어 있을 때는 []를 사용합니다. 두 인수 값은 모두 무시합니다. 이 하나의 응답 문자열을 만들 때 contacts.keys.sorted().toString()을 사용하세요. COUNT를 추가하세요. contacts=N;phones=P로 응답하며, N은 저장된 이름의 수로, P는 서로 다른 저장된 전화번호 문자열의 수로 바꿉니다. 두 인수는 모두 무시합니다. 두 이름이 하나의 전화번호를 공유할 수 있습니다. 입력에는 이 단계에서 지원하는 명령만 포함됩니다. 무시되는 인수 문자열은 비어 있지 않은 임의의 텍스트일 수 있습니다.
위에서 더 엄격한 범위를 지정하지 않은 경우, 컬렉션은 각 수준에서 최대 100개의 요소를 포함하며 정수 인수와 정수 컬렉션 값은 -1000에서 1000 사이입니다. 파싱을 위해 제공되는 텍스트에는 설명된 것처럼 유효하지 않거나 범위를 벗어난 표현이 포함될 수 있습니다.
List<String> 유형의 값을 반환하세요. 제공된 입출력 코드를 유지하세요. 이 코드는 스칼라 인수를 한 줄에 하나씩 읽습니다. 목록은 개수와 그 뒤에 이어지는 요소로 시작하고, 맵은 항목 개수와 그 뒤에 이어지는 각 키와 값으로 시작합니다. 중첩 목록은 각 행에 대해 개수와 요소 형식을 반복합니다. 제공된 main은 반환값 뒤에 개행 문자 하나를 출력합니다. 목록은 Kotlin의 표준 대괄호 형식을 사용하며, 추가 레이블은 출력하지 마세요.
직접 해보기
fun contactBook(commands: List<String>, names: List<String>, phones: List<String>): List<String> {
val contacts = mutableMapOf<String, String>()
val replies = mutableListOf<String>()
for (i in commands.indices) {
val name = names[i]
when (commands[i]) {
"PUT" -> {
contacts[name] = phones[i]
replies.add("saved")
}
"FIND" -> replies.add(contacts[name] ?: "missing")
"REMOVE" -> {
if (contacts.containsKey(name)) {
contacts.remove(name)
replies.add("removed")
} else replies.add("missing")
}
"LIST" -> replies.add(contacts.keys.sorted().toString())
}
}
return replies
}
fun main() {
val commandsCount = readln().toInt()
val commands = mutableListOf<String>()
for (i0 in 0 until commandsCount) {
val commandsItem = readLine().orEmpty()
commands.add(commandsItem)
}
val namesCount = readln().toInt()
val names = mutableListOf<String>()
for (i0 in 0 until namesCount) {
val namesItem = readLine().orEmpty()
names.add(namesItem)
}
val phonesCount = readln().toInt()
val phones = mutableListOf<String>()
for (i0 in 0 until phonesCount) {
val phonesItem = readLine().orEmpty()
phones.add(phonesItem)
}
println(contactBook(commands, names, phones))
}논리와 흐름의 모든 레슨
직접 연습해 보세요: Kotlin 플레이그라운드