Menu
Coddy logo textTech

Set에서 제거하기

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

때때로 집합(set)에서 요소를 제거해야 할 때가 있으며, Go에서는 내장된 delete() 함수를 사용하여 이를 간단하게 처리할 수 있습니다. 집합은 실제로 내부적으로 맵(map)이기 때문에, 요소를 제거하는 것은 맵에서 키를 제거하는 것과 정확히 동일하게 작동합니다.

세트에서 요소를 제거하려면 세트와 제거하려는 요소를 delete() 함수와 함께 사용하세요:

delete(colors, "red")

delete() 함수는 두 개의 매개변수를 받습니다: 맵(사용자의 세트)과 제거하려는 키입니다. 요소가 세트에 존재하면 제거됩니다. 요소가 존재하지 않으면 함수는 아무 작업도 수행하지 않으며 오류가 발생하지 않습니다.

이 동작은 집합(sets)에 완벽합니다. 왜냐하면 처음에 요소가 있었는지 여부와 관계없이 요소가 존재하지 않음을 보장하고 싶은 경우가 많기 때문입니다. 이 작업은 빠르고 효율적이며, Go의 내부 map 구현의 성능 이점을 유지합니다.

quiz icon실력 점검

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

quiz icon실력 점검

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

quiz icon실력 점검

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

challenge icon

챌린지

쉬움

Go의 세트(set) 관용구를 사용하여 다양한 장르 컬렉션에서 책을 제거하는 도서관 도서 관리 시스템을 구축하세요. 이 챌린지는 제거 프로세스를 추적하면서 세트에서 요소를 제거하기 위해 delete() 함수를 사용하는 방법을 보여줍니다.

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

  • 쉼표로 구분된 소설 컬렉션의 도서가 포함된 문자열 (예: "1984,Dune,Foundation,Neuromancer,Brave New World")
  • 쉼표로 구분된 제거할 도서가 포함된 문자열 (예: "Dune,Harry Potter,Foundation,Twilight,1984")

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

  1. Go의 관용구인 map[string]struct{}를 사용하여 소설 도서를 저장할 세트를 생성합니다.
  2. 첫 번째 입력 문자열을 쉼표로 분할하여 개별 도서 제목을 가져와 파싱합니다.
  3. 빈 구조체 리터럴 {}를 값으로 사용하여 각 도서를 세트에 추가합니다.
  4. 두 번째 입력 문자열을 쉼표로 분할하여 제거할 도서 목록을 가져와 파싱합니다.
  5. 제거할 각 도서에 대해 comma ok 관용구를 사용하여 세트에 존재하는지 확인합니다.
  6. 처리 중인 각 도서에 대한 제거 프로세스를 표시합니다:
    • 도서가 컬렉션에 존재하는 경우: "Removing: [book_title]"
    • 도서가 컬렉션에 존재하지 않는 경우: "Not found: [book_title]"
  7. delete() 함수를 사용하여 세트에 존재하는 도서를 제거합니다.
  8. 모든 제거 요청을 처리한 후 요약을 표시합니다:
    • "Initial collection size: [initial_count]"
    • "Removal requests: [requests_count]"
    • "Books successfully removed: [removed_count]"
    • "Books not found: [not_found_count]"
    • "Final collection size: [final_count]"
  9. 마지막으로 컬렉션에 남은 모든 도서를 나열합니다:
    • 헤더: "Remaining books in fiction collection:"
    • 각 도서를 별도의 줄에 표시: "- [book_title]"
    • 남은 도서가 없는 경우: "- Collection is empty"

strings 패키지를 사용하여 입력 문자열을 쉼표로 분할하세요. 이 챌린지는 delete() 함수가 Go 세트에서 요소를 안전하게 제거하는 방법을 보여줍니다. 존재하지 않는 요소를 제거하려고 시도해도 오류가 발생하지 않으므로 정리 작업에 적합합니다.

치트 시트

Go에서 세트(set)의 요소를 제거하려면, 내장된 delete() 함수를 사용하세요:

delete(colors, "red")

delete() 함수는 두 개의 매개변수를 받습니다: 맵(사용자의 세트)과 제거하려는 키입니다. 요소가 존재하면 제거됩니다. 요소가 존재하지 않으면 함수는 아무 작업도 수행하지 않으며 에러도 발생하지 않습니다.

이러한 특성 덕분에 delete()는 세트에 사용하기에 완벽합니다. 요소가 처음에 있었는지 여부와 상관없이 해당 요소가 존재하지 않음을 보장하고 싶은 경우가 많기 때문입니다.

직접 해보기

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// 공백이 포함된 도서 제목을 지원하기 위해 Scanner를 사용하여 입력 읽기
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	fictionBooks := scanner.Text()
	scanner.Scan()
	booksToRemove := scanner.Text()

	// 입력 문자열 파싱
	fictionList := strings.Split(fictionBooks, ",")
	removeList := strings.Split(booksToRemove, ",")

	// TODO: 아래에 코드를 작성하세요
	// 1. 소설 책을 저장하기 위해 map[string]struct{}를 사용하여 세트 생성
	// 2. fictionList의 각 도서를 세트에 추가
	// 3. removeList의 각 도서를 처리하고 존재 여부 확인
	// 4. 제거 과정을 표시하고 delete() 함수 사용
	// 5. 요약 통계 표시
	// 6. 컬렉션에 남은 도서 목록 나열
	// 일관된 출력을 위해 남은 도서를 정렬해야 함을 기억하세요

	_ = sort.Strings // sort를 사용하면 이 라인을 제거하세요
	_ = fmt.Println  // fmt를 사용하면 이 라인을 제거하세요
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨