Menu
Coddy logo textTech

리스트를 세트로 변환하기

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 21번째.

Set의 가장 실용적인 응용 사례 중 하나는 List에서 중복된 요소를 제거하는 것입니다. 집합(Set)은 자동으로 중복을 제거하므로, 중복된 값을 가진 리스트를 고유한 요소들의 컬렉션으로 쉽게 변환할 수 있습니다.

ListSet으로 변환하려면, 단순히 리스트를 Set.from() 생성자에 전달하면 됩니다. 이렇게 하면 원래 리스트의 모든 고유한 요소를 포함하는 새로운 세트가 생성됩니다.

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);

print(uniqueNumbers);  // {1, 2, 3, 4, 5}

만약 결과를 List로 다시 돌려받아야 한다면 (아마도 코드의 다른 부분과의 호환성을 유지하기 위해), toList()를 사용하여 세트를 다시 리스트로 변환할 수 있습니다. 이렇게 하면 원본에서 고유한 요소들만 포함된 리스트를 얻을 수 있습니다.

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

이 List → Set → List 패턴은 추가 처리를 위해 리스트 구조를 유지하면서 중복을 제거하여 데이터를 정리해야 할 때 매우 흔히 사용됩니다.

challenge icon

챌린지

쉬움

설문 조사 응답에서 중복 항목을 제거하여 데이터 클리닝 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:

  1. 설문 조사 제목을 나타내는 문자열 입력을 읽습니다.
  2. 설문 조사 응답을 나타내는 여러 문자열 입력을 읽습니다 (입력은 "responses_done"을 받으면 종료됩니다).
  3. 중복을 포함한 모든 원본 응답을 저장할 List를 생성합니다.
  4. Set.from()을 사용하여 List를 Set으로 변환하여 자동으로 중복을 제거합니다.
  5. toList()를 사용하여 Set을 다시 고유한 응답들로 구성된 List로 변환합니다.
  6. 데이터 클리닝 결과를 아래에 표시된 정확한 형식으로 출력합니다.

예를 들어, 설문 조사 제목이 "Customer Satisfaction Survey"이고 응답이 "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor"인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfully

설문 조사 제목이 "Product Feedback"이고 응답이 "Like", "Dislike", "Like", "Like"인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfully

설문 조사 제목이 "Event Rating"이고 응답이 "Amazing", "Okay", "Great"인 경우, 프로그램은 다음과 같이 출력해야 합니다:

Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfully

프로그램은 List → Set → List 패턴을 완벽하게 보여주어야 합니다. 먼저 모든 응답을 List에 저장한 다음, Set.from()을 사용하여 List로부터 Set을 생성하고, 마지막으로 toList()를 사용하여 Set을 다시 List로 변환합니다. 제거된 중복 항목의 수는 원래 총 개수에서 최종 고유 개수를 빼서 계산하세요.

치트 시트

List에서 중복을 제거하려면, Set.from()을 사용하여 Set으로 변환하세요:

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);
print(uniqueNumbers);  // {1, 2, 3, 4, 5}

Set을 다시 List로 변환하려면 toList()를 사용하세요:

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

List → Set → List 패턴은 리스트 구조를 유지하면서 데이터를 정제하는 데 흔히 사용됩니다.

직접 해보기

import 'dart:io';

void main() {
  // 설문 조사 제목 읽기
  String? surveyTitle = stdin.readLineSync();
  
  // "responses_done"이 입력될 때까지 설문 응답 읽기
  List<String> originalResponses = [];
  String? response;
  while ((response = stdin.readLineSync()) != "responses_done") {
    if (response != null) {
      originalResponses.add(response);
    }
  }
  
  // TODO: 아래에 코드를 작성하세요
  // 1. Set.from()을 사용하여 리스트를 Set으로 변환 (중복 제거)
  // 2. toList()를 사용하여 Set을 다시 리스트로 변환
  // 3. 제거된 중복 항목 수와 최종 개수 계산
  
  // 결과를 요구된 형식으로 출력
  print("Survey: $surveyTitle");
  print("Original responses: $originalResponses");
  // 여기에 나머지 출력문을 추가하세요
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨