단어 분석
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 54번째.
문자열, 해시, Hash.new(0), 그리고 Enumerable 메서드를 한꺼번에 활용하는 독립적인 챌린지입니다.
챌린지
중급한 줄의 입력(문장)을 읽습니다. 이를 분석하여 다음 세 줄을 출력하세요:
- 고유한 단어의 수 (대소문자 구분 없음, 문장 부호 제거). 반복되는 단어는 한 번만 계산합니다.
- 두 번 이상 나타나는 반복되는 단어들을 알파벳순으로 정렬하고
,로 연결하여 출력합니다. 해당되는 단어가 없으면(none)을 출력합니다. - 앞뒤가 똑같은 회문(palindrome) 단어(길이 2 이상)들을 알파벳순으로 정렬하고
,로 연결하여 출력합니다. 해당되는 단어가 없으면(none)을 출력합니다.
처리하기 전에 각 단어에서 .,!?:;"() 문자를 제거하세요. 비교를 위해 모든 문자를 소문자로 변환합니다.
입력이 Madam saw a racecar. Dad said hello hello to mom.인 경우, 출력은 다음과 같습니다:
9
hello
dad, madam, mom, racecar치트 시트
Hash.new(0)을 사용하여 단어 빈도수를 계산한 다음, Enumerable 메서드를 사용하여 필터링 및 정렬합니다:
words = line.gsub(/[.,!?:;"()]/, '').downcase.split
freq = Hash.new(0)
words.each { |w| freq[w] += 1 }
unique = freq.keys
repeated = freq.select { |_, v| v > 1 }.keys.sort
palindromes = unique.select { |w| w.length >= 2 && w == w.reverse }.sort컬렉션이 비어 있을 때 (none)을 출력합니다:
puts repeated.empty? ? "(none)" : repeated.join(", ")직접 해보기
input = gets.chomp
# TODO: split, 문장 부호 제거, 소문자 변환 후 출력:
# 고유 단어 수, 반복된 단어들, 회문 (length >= 2)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.