반응형
https://www.acmicpc.net/problem/1157
자세한 내용은 위 링크에서 직접 확인해보도록 하자.
풀이
import java.util.*
fun main() {
val input = Scanner(System.`in`)
val s = input.next().toUpperCase()
var max = 0
var res = ' '
for(i in s){
val cnt = s.count{it == i}
if(max < cnt){
max = cnt
res = i
}else if(max == cnt && res != i){
res = '?'
break
}
}
println(res)
}
일단 문제에서 대소문자를 구분하지 않는다고 했으니 모든 uppercase를 사용해서 모두 대문자로 바꿔준다.
그 후 문자열을 for문으로 loop하면서 각 문자들의 갯수를 새주도록 하였는데,
위와 같이 시간 초과가 발생했다.
아마도 for문 내에서 count함수를 사용했기 때문이라고 생각된다.
그래서 아래와 같은 방법으로 변경했다.
import java.util.*
fun main() {
val input = Scanner(System.`in`)
val s = input.next().toUpperCase()
var max = 0
var res = ' '
var arr = Array(26, {0})
for(i in s){
arr[i.toInt() - 65] += 1
}
for(i in 0 .. arr.lastIndex){
if(max < arr[i]){
max = arr[i]
res = (i + 65).toChar()
}else if(max == arr[i] && max != 0){
res = '?'
}
}
println(res)
}
먼저 a~z알파벳의 갯수가 들어갈 크기 26의 배열을 선언해준다.
for문에서는 문자열에서 알파벳이 등장할 때 마다 배열에 있는 해당 알파벳의 위치에 갯수를 하나씩 더해준다.
이렇게 알파벳의 갯수를 모두 카운팅 한 뒤, 배열을 for문으로 돌면서 가장 많은 알파벳의 갯수를 세어주면 끝이다.
반응형
'백준' 카테고리의 다른 글
백준 1003번 피보나치 함수(Kotlin) (0) | 2022.01.08 |
---|---|
백준 1700. 멀티탭 스케줄링(파이썬) (0) | 2020.11.25 |
백준 1202번. 보석 도둑(파이썬) (0) | 2020.11.24 |
백준1449번. 수리공 항승(파이썬) (0) | 2020.11.23 |
백준 2529번. 부등호 (C언어) (0) | 2020.08.14 |