교집합
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 23번째.
두 개의 Set 컬렉션 모두에 존재하는 요소를 찾아야 할 때, intersection() 메서드는 완벽한 해결책을 제공합니다. 이 연산은 두 집합 사이의 공통 요소를 식별하여, 두 원본 컬렉션 모두에 나타나는 항목만 포함하는 새로운 집합을 생성합니다.
intersection() 메서드는 두 세트의 요소를 비교하여 공통된 값만을 포함하는 새로운 세트를 반환하는 방식으로 작동합니다. 다른 세트 연산과 마찬가지로 고유성을 자동으로 처리하므로, 각 공통 요소는 결과에 한 번만 나타납니다.
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}이 연산은 사용자 간의 공통 관심사, 팀 내의 공유된 기술 또는 필터링 작업에서의 일치하는 기준과 같이 데이터에서 겹치는 부분을 찾는 데 특히 유용합니다. 교집합(intersection)은 두 컬렉션이 공통으로 가지고 있는 요소를 식별하는 데 도움을 주어, 비교 및 분석 작업에 유용하게 활용됩니다.
챌린지
쉬움두 사용자 간의 공통된 친구(상호 연결)를 찾아 소셜 미디어 플랫폼을 관리하는 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 첫 번째 사용자의 이름을 나타내는 문자열 입력을 읽습니다.
- 첫 번째 사용자의 연결된 친구들을 나타내는 여러 문자열 입력을 읽습니다 (입력은
"user1_done"을 받으면 종료됩니다). - 두 번째 사용자의 이름을 나타내는 문자열 입력을 읽습니다.
- 두 번째 사용자의 연결된 친구들을 나타내는 여러 문자열 입력을 읽습니다 (입력은
"user2_done"을 받으면 종료됩니다). - 각 사용자의 연결된 친구들을 저장하기 위해 두 개의 별도 Set을 생성합니다.
intersection()메서드를 사용하여 두 사용자 간의 상호 연결을 찾습니다.- 아래에 표시된 정확한 형식으로 연결 분석 결과를 출력합니다.
예를 들어, 첫 번째 사용자가 "Alice"이고 연결된 친구가 "Bob", "Charlie", "Diana", "Eve"이며, 두 번째 사용자가 "Bob"이고 연결된 친구가 "Alice", "Charlie", "Frank", "Diana"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connections만약 첫 번째 사용자가 "Sarah"이고 연결된 친구가 "John", "Mike", "Lisa"이며, 두 번째 사용자가 "Tom"이고 연결된 친구가 "Emma", "David", "Kate"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connections만약 첫 번째 사용자가 "Emma"이고 연결된 친구가 "Alex", "Jordan", "Taylor", "Morgan"이며, 두 번째 사용자가 "Jordan"이고 연결된 친구가 "Emma", "Taylor", "Casey"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connections프로그램은 두 사용자 Set 사이의 공통 연결을 찾기 위해 intersection() 메서드를 사용해야 합니다. 상호 연결 수에 따라 연결 강도를 결정하세요: 상호 연결이 0개이면 "None", 정확히 1개이면 "Weak", 2개 이상이면 "Strong"으로 표시합니다. 상호 연결이 있는 경우 상태(Status)에 "Users have mutual connections"를 표시하고, 그렇지 않으면 "Users have no mutual connections"를 표시합니다.
치트 시트
intersection() 메서드는 두 세트 간의 공통 요소를 찾아, 공유된 값들만 포함하는 새로운 세트를 반환합니다:
Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};
Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends); // {Charlie, Diana}이 연산은 중복을 자동으로 처리하며 공통 관심사, 공유 기술 또는 필터링 작업의 일치 기준과 같이 데이터의 겹치는 부분을 찾는 데 유용합니다.
직접 해보기
import 'dart:io';
void main() {
// 첫 번째 사용자의 이름을 읽습니다.
String? user1Name = stdin.readLineSync();
// "user1_done"이 입력될 때까지 첫 번째 사용자의 연결 관계를 읽습니다.
Set<String> user1Connections = <String>{};
String? connection;
while ((connection = stdin.readLineSync()) != "user1_done") {
if (connection != null) {
user1Connections.add(connection);
}
}
// 두 번째 사용자의 이름을 읽습니다.
String? user2Name = stdin.readLineSync();
// "user2_done"이 입력될 때까지 두 번째 사용자의 연결 관계를 읽습니다.
Set<String> user2Connections = <String>{};
while ((connection = stdin.readLineSync()) != "user2_done") {
if (connection != null) {
user2Connections.add(connection);
}
}
// TODO: 아래에 코드를 작성하세요.
// intersection() 메서드를 사용하여 서로 아는 연결 관계를 찾습니다.
// 서로 아는 연결 관계의 수에 따라 연결 강도를 결정합니다.
// 필요한 출력 형식을 생성합니다.
// 분석 결과를 출력합니다.
print("User Analysis: Finding mutual connections");
// 여기에 출력 문을 추가하세요.
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구