인프런 커뮤니티 질문&답변

Seongjin Lee님의 프로필 이미지
Seongjin Lee

작성한 질문수

[입문편] 안드로이드를 위한 코틀린(Kotlin) 문법

알파벳 숫자 세기

알파벳 숫자 세기, mutableMap value 값 변경

작성

·

322

·

수정됨

0

제 주력 언어는 파이썬인데, 코틀린을 배우는데... 코틀린은 파이썬과 다르게 기능이 별로 없네요.

알파벳 숫자 세는 것을 아래와 같이 하려고 하는데, value+=1이 안 됩니다. 어떻게 해야 하나요?

fun solution( str : String ): Map<String, Int>{

var result = mutableMapOf<String,Int>()

 

for (i in 0..str.length-1){

var currLetter = str[i].toString()

//이 부분에서, 문자열을 인덱싱했으니 당연히 타입은 그대로일 줄 알았는데 Char()라고 합니다. ㄷㄷㄷㄷ 이건 왜 인가요?

if (currLetter in result.keys){

result[currLetter] = 2 /// 제가 하고 싶은 것: result[currLetter] += 1

//전체적인 틀의 문제인가 싶어서, 강제로 2를 할당시켜봤더니 이 부분은 정상적으로 작동합니다. 그런데 1을 더하는 것이 안 되네요, 자바와 파이썬 모두 가능한 것으로 알고 있는데 왜 안 될까요? 인터넷 검색을 해봐도, 딱히 +=1이 되는 것 같지는 않네요. 자바처럼 Counter()를 써야 하나요?

//혹시 몰라 아래와 같이 해보니까, 이것 또한 안 됩니다.

//둘 모두 아래와 동일한 에러가 나옵니다.

/*
Operator call corresponds to a dot-qualified call 'result[currLetter].plus(1)' which is not allowed on a nullable receiver 'result[currLetter]'.

*/

//어떻게 해야 하나요???

temp = result[currLetter]

result[currLetter] = temp +1

}

else{

result[currLetter] =1

}

 

}

return result

}

답변 1

0

Seongjin Lee님의 프로필 이미지
Seongjin Lee
질문자

혹시 이 질문 보시는 분들께 도움드리고자 제 글에 댓글 적어요.

result[currLetter] = result.getOrDefault(currLetter,0) +1

이렇게 하니까 되네요, 파이썬보다 비효율적입니다 ㅠㅠㅠㅠㅠ 앞으로 열심히 공부해볼게요

Seongjin Lee님의 프로필 이미지
Seongjin Lee

작성한 질문수

질문하기