Menu
Coddy logo textTech

중복 없는 항목 수집기

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

challenge icon

챌린지

쉬움

Go의 관용적인 세트(set) 패턴을 사용하여 문자열 컬렉션에서 고유한 항목을 필터링하는 중복 제거 시스템을 만드세요. 이 챌린지는 map[string]struct{} 관용구를 사용하여 이미 확인된 항목을 추적하고 고유한 요소만 포함하는 컬렉션을 구축하는 능력을 테스트합니다.

두 개의 입력을 받게 됩니다:

  • 쉼표로 구분된 항목을 포함하는 문자열 (예: "apple,banana,apple,orange,banana,grape,apple")
  • 병합할 추가 항목을 포함하는 문자열, 역시 쉼표로 구분됨 (예: "kiwi,apple,mango,banana,kiwi")

당신의 과제는 다음과 같습니다:

  1. 문자열 슬라이스를 받아 고유한 문자열만 포함하는 새 슬라이스를 반환하는 getUniqueItems라는 함수를 만듭니다.
  2. 이 함수 내부에서 map[string]struct{} 관용구를 사용하여 어떤 항목이 확인되었는지 추적합니다.
  3. 입력 슬라이스를 반복하며 각 항목에 대해 다음을 수행합니다:
    • comma ok 관용구를 사용하여 항목이 세트에 존재하는지 확인합니다.
    • 항목이 이전에 확인되지 않았다면 세트와 결과 슬라이스 모두에 추가합니다.
  4. 첫 번째 입력을 쉼표로 분할하여 초기 항목 리스트를 파싱합니다.
  5. 두 번째 입력을 쉼표로 분할하여 추가 항목을 파싱합니다.
  6. 시스템 헤더를 표시합니다: "=== UNIQUE ITEM COLLECTOR ==="
  7. 원본 항목을 표시합니다: "Original items: [comma-separated list of all original items]"
  8. 추가 항목을 표시합니다: "Additional items: [comma-separated list of all additional items]"
  9. getUniqueItems 함수를 사용하여 원본 리스트에서 고유한 항목을 가져옵니다.
  10. 고유한 원본 항목을 표시합니다: "Unique original items: [comma-separated list of unique items from original list]"
  11. 두 입력 슬라이스를 모든 항목을 포함하는 단일 슬라이스로 결합합니다.
  12. getUniqueItems 함수를 사용하여 결합된 리스트에서 고유한 항목을 가져옵니다.
  13. 최종 고유 항목을 표시합니다: "Final unique items: [comma-separated list of all unique items]"
  14. 컬렉션 통계를 표시합니다:
    • "=== 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]"
  15. 완료 메시지를 표시합니다: "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 사용
}

로직 & 흐름의 모든 레슨