중복 없는 항목 수집기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 68번째.
챌린지
쉬움Go의 관용적인 세트(set) 패턴을 사용하여 문자열 컬렉션에서 고유한 항목을 필터링하는 중복 제거 시스템을 만드세요. 이 챌린지는 map[string]struct{} 관용구를 사용하여 이미 확인된 항목을 추적하고 고유한 요소만 포함하는 컬렉션을 구축하는 능력을 테스트합니다.
두 개의 입력을 받게 됩니다:
- 쉼표로 구분된 항목을 포함하는 문자열 (예:
"apple,banana,apple,orange,banana,grape,apple") - 병합할 추가 항목을 포함하는 문자열, 역시 쉼표로 구분됨 (예:
"kiwi,apple,mango,banana,kiwi")
당신의 과제는 다음과 같습니다:
- 문자열 슬라이스를 받아 고유한 문자열만 포함하는 새 슬라이스를 반환하는
getUniqueItems라는 함수를 만듭니다. - 이 함수 내부에서
map[string]struct{}관용구를 사용하여 어떤 항목이 확인되었는지 추적합니다. - 입력 슬라이스를 반복하며 각 항목에 대해 다음을 수행합니다:
- comma ok 관용구를 사용하여 항목이 세트에 존재하는지 확인합니다.
- 항목이 이전에 확인되지 않았다면 세트와 결과 슬라이스 모두에 추가합니다.
- 첫 번째 입력을 쉼표로 분할하여 초기 항목 리스트를 파싱합니다.
- 두 번째 입력을 쉼표로 분할하여 추가 항목을 파싱합니다.
- 시스템 헤더를 표시합니다:
"=== UNIQUE ITEM COLLECTOR ===" - 원본 항목을 표시합니다:
"Original items: [comma-separated list of all original items]" - 추가 항목을 표시합니다:
"Additional items: [comma-separated list of all additional items]" getUniqueItems함수를 사용하여 원본 리스트에서 고유한 항목을 가져옵니다.- 고유한 원본 항목을 표시합니다:
"Unique original items: [comma-separated list of unique items from original list]" - 두 입력 슬라이스를 모든 항목을 포함하는 단일 슬라이스로 결합합니다.
getUniqueItems함수를 사용하여 결합된 리스트에서 고유한 항목을 가져옵니다.- 최종 고유 항목을 표시합니다:
"Final unique items: [comma-separated list of all unique items]" - 컬렉션 통계를 표시합니다:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- 완료 메시지를 표시합니다:
"Unique item collection completed successfully"
입력 문자열을 분할하려면 strings 패키지를 사용하고, 출력을 위해서는 fmt 패키지를 사용하세요. 표시를 위해 항목을 결합할 때는 쉼표 구분자와 함께 strings.Join을 사용하세요. 이 챌린지는 Go의 세트 관용구가 데이터 처리 애플리케이션에서 자주 사용되는 패턴인 컬렉션의 중복 제거 문제를 얼마나 효율적으로 해결하는지 보여줍니다.
직접 해보기
package main
import (
"fmt"
"strings"
)
func main() {
// 입력 읽기
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// 입력 문자열을 슬라이스로 파싱
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: 여기에 코드를 작성하세요
// 1. map[string]struct{} 관용구를 사용하는 getUniqueItems 함수 생성
// 2. 원본 항목을 처리하여 고유 항목 가져오기
// 3. 두 슬라이스를 결합하고 결합된 목록에서 고유 항목 가져오기
// 4. 통계 계산
// 시스템 헤더 표시
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// 원본 및 추가 항목 표시
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: 고유한 원본 항목, 최종 고유 항목 및 통계 표시
// 출력 포맷팅을 위해 fmt.Printf 및 strings.Join 사용
}