Menu
Coddy logo textTech

데이터 변환기

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

캡스톤 챌린지: 데이터셋을 요약 보고서로 재구성합니다. 필터링, 매핑, 그룹화, 에러 처리 및 메서드 정의를 하나의 프로그램으로 결합하세요.

challenge icon

챌린지

중급

students 배열이 주어집니다. 각 항목은 :id, :grades (정수 배열, 비어 있을 수 있음), 그리고 :subjects (문자열 배열)를 포함하는 해시입니다.

두 개의 키를 가진 해시를 반환하는 transform_dataset(students) 메서드를 정의하세요:

  • :qualified_ids: 최소 하나 이상의 성적이 있고 모든 성적이 70점을 초과하는 학생들의 :id를 정렬한 배열 (all?을 사용하세요).
  • :subject_counts: 자격이 있는 학생들이 수강하는 각 과목을 해당 과목을 수강하는 자격 있는 학생 수로 매핑한 해시.

학생의 :grades 배열이 비어 있다면, 그 학생은 자격이 없으므로 무시하고 넘어갑니다.

그런 다음 메서드를 호출하고 다음을 출력하세요:

  1. 자격이 있는 ID들을 , 로 연결하고, 앞에 Qualified: 를 붙여 출력합니다. 만약 없다면, Qualified: (none)을 출력합니다.
  2. 각 과목당 한 줄씩(알파벳 순으로 정렬) <subject>: <count> 형식으로 출력합니다.

기본 students 데이터에 대한 출력 결과는 다음과 같습니다:

Qualified: S1, S4
biology: 1
history: 1
math: 2
physics: 1

치트 시트

Ruby에서 필터링, 매핑, 그룹화 및 출력 포맷팅을 결합하는 방법입니다:

def transform_dataset(students)
  qualified = students.select do |s|
    s[:grades].any? && s[:grades].all? { |g| g > 70 }
  end

  qualified_ids = qualified.map { |s| s[:id] }.sort

  subject_counts = Hash.new(0)
  qualified.each do |s|
    s[:subjects].each { |subj| subject_counts[subj] += 1 }
  end

  { qualified_ids: qualified_ids, subject_counts: subject_counts }
end

폴백(fallback) 처리 및 정렬된 키와 함께 결과를 출력합니다:

result = transform_dataset(students)

ids = result[:qualified_ids]
puts "Qualified: #{ids.any? ? ids.join(', ') : '(none)'}"

result[:subject_counts].sort.each do |subject, count|
  puts "#{subject}: #{count}"
end
  • all?은 빈 배열에서 false를 반환합니다 — 빈 성적 배열을 방지하기 위해 먼저 any?를 사용하세요.
  • Hash.new(0)은 누락된 키를 0으로 초기화하며, 개수를 셀 때 유용합니다.
  • 해시(hash)에 대한 .sort는 알파벳순으로 정렬된 [key, value] 쌍을 반환합니다.

직접 해보기

students = [
  { id: "S1", grades: [85, 92, 78], subjects: ["math", "physics"] },
  { id: "S2", grades: [65, 80, 90], subjects: ["math", "biology"] },
  { id: "S3", grades: [],          subjects: ["art"] },
  { id: "S4", grades: [88, 95],    subjects: ["math", "biology", "history"] },
  { id: "S5", grades: [70, 75],    subjects: ["chemistry"] }
]

# 할 일: def transform_dataset(students), { qualified_ids:, subject_counts: }를 반환
# 할 일: 자격이 있는 ID와 과목별 개수를 출력
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨