백준
백준 1157번. 단어 공부
닉네임못짓는사람
2022. 1. 20. 13:40
반응형
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
자세한 내용은 위 링크에서 직접 확인해보도록 하자.
풀이
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문으로 돌면서 가장 많은 알파벳의 갯수를 세어주면 끝이다.
반응형