PersesTitan(페르) 기술블로그

[Ruby] 백준 1157번: 단어 공부 본문

BaekJoon/Ruby

[Ruby] 백준 1157번: 단어 공부

PersesTitan(페르) 2023. 11. 7. 15:51

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

문제


알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력


첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력


첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.


해설


입력받은 값을 모두 소문자(또는 대문자)로 변경한 후 해당 알파벳에 일치하는 값의 갯수를 카운트한 후 가장 높은 값을 찾은 뒤 해당 값이 2개 이상일때 ?를 출력하고 아닐때는 최대값을 출력하면 됩니다.

코드


코드 설명

더보기

제가 작성한 코드는 알파벳 26개를 저장할 배열을 미리 생성해두고 아스키코드값을 이용하여 배열 인덱스를 정하여 값을 증가 시켜주었습니다. 이후 최대값이 2개일때 ?를 출력하고 아닐때는 최대값의 문자를 출력하였습니다.

더보기
array = Array.new(26, 0)
gets.chomp.upcase.split("").each { |n|
  array[n.ord-65] += 1
}
max = array.max
i, r = array.index(max), array.rindex(max)
if i != r
  puts "?"
else
  puts (i + 65).chr
end

 

'BaekJoon > Ruby' 카테고리의 다른 글

[Ruby] 백준 2438: 별 찍기 - 1  (2) 2023.11.24
[Ruby] 백준 1330: 두 수 비교하기  (0) 2023.11.23
[Ruby] 백준 1152번: 단어의 개수  (0) 2023.11.06
[Ruby] 백준 1008번: A/B  (0) 2023.11.03
[Ruby] 백준 1001번: A-B  (1) 2023.11.03