Menu
Coddy logo textTech

단어 분석

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 54번째.

문자열, 해시, Hash.new(0), 그리고 Enumerable 메서드를 한꺼번에 활용하는 독립적인 챌린지입니다.

challenge icon

챌린지

중급

한 줄의 입력(문장)을 읽습니다. 이를 분석하여 다음 세 줄을 출력하세요:

  1. 고유한 단어의 수 (대소문자 구분 없음, 문장 부호 제거). 반복되는 단어는 한 번만 계산합니다.
  2. 두 번 이상 나타나는 반복되는 단어들을 알파벳순으로 정렬하고 , 로 연결하여 출력합니다. 해당되는 단어가 없으면 (none)을 출력합니다.
  3. 앞뒤가 똑같은 회문(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)
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨