https://www.acmicpc.net/problem/1157
풀이
더보기
(이 문제는 내가 짠 식이 시간복잡도 상 최적의 효율이라 생각되지 않는다 ;ㅅ; )
먼저 입력받은 문자열이 대소문자를 구분하지 않으므로, 그리고 대문자 출력을 원했으므로 upperCase()를 통해 대문자로 치환한다. 그리고 알파벳 별로 띄워놓기 위해 .toCharArray()를 통해 배열로 전환한다.
그리고 distinct()를 통해 겹치는 요소를 삭제한다.
그리고 반복문을 돌리기 전에 최고값을 파악하고, 이 때의 문자를 저장해 줄 두 변수를 선언한다(maxCount, maxChar).
겹치는 요소가 삭제된 배열을 forEach문을 통해 반복한다. 이 때 기존의 배열에서 일치하는 char의 갯수만 카운트 하도록 count { it == 현재 forEach의 it값 } 을 한다.
그리고 이 카운트와 for문 외부에서 선언해둔 maxCount를 비교한다.
이 때 두 값이 같다면 maxChar만 "?" 로 변경하고, count가 maxCount보다 크다면 maxCount도 count로 갱신하고 문자열도 g현재 forEach의 it 값으로 대체한다. 약간..max() 함수의 작동방식과 유사하다.
import kotlin.math.max
fun main(args: Array<String>) {
question1157()
}
fun question1157() {
var maxCount = 0
var maxChar = ""
var word = readLine()!!.uppercase().toCharArray()
var wordDistinct = word.distinct()
wordDistinct.forEach {
var count = word.count { wordChar -> wordChar == it }
if(maxCount == count) {
maxChar = "?"
} else if(maxCount < count) {
maxCount = count
maxChar = it.toString()
}
}
println(maxChar)
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 1316번 문제풀이 (1) | 2023.06.09 |
---|---|
Kotlin] 백준 2941번 문제풀이 (1) | 2023.06.09 |
Kotlin] 백준 4344번 문제풀이 (0) | 2023.06.08 |
Kotlin] 백준 2444번 문제풀이 (1) | 2023.06.07 |
Kotlin] 백준 10988번 문제풀이 (0) | 2023.06.07 |