Menu
Coddy logo textTech

Set 순회하기

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

이제 세트에서 요소를 추가, 확인 및 제거할 수 있게 되었으므로, 모든 요소를 순회하는 방법을 배울 차례입니다. Go 세트는 맵을 기반으로 구축되었으므로, 익숙한 for...range 루프를 사용하여 각 요소에 접근할 수 있습니다.

Set을 반복하려면 Map을 반복할 때와 동일한 구문을 사용하지만, 키만 고려하면 됩니다:

for color := range colors {
    fmt.Println(color)
}

range 루프에서 하나의 변수만 사용하고 있다는 점에 유의하세요. 값(모두 빈 구조체임)은 필요하지 않으므로 완전히 무시할 수 있습니다. 이렇게 하면 세트의 각 색상이 한 줄에 하나씩 출력됩니다.

값을 무시한다는 것을 명시적으로 나타내고 싶다면 두 개의 변수 형식을 사용할 수도 있습니다:

for color, _ := range colors {
    fmt.Println(color)
}

Go의 맵(map)은 반복 시 특정 순서를 보장하지 않으므로, 프로그램을 실행할 때마다 세트(set) 요소가 다른 순서로 출력될 수 있다는 점을 유의하세요. 이는 세트의 지극히 정상적인 동작입니다. 세트는 순서 유지보다는 멤버십 테스트(요소 포함 여부 확인)를 위해 설계되었기 때문입니다.

quiz icon실력 점검

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

quiz icon실력 점검

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

quiz icon실력 점검

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

challenge icon

챌린지

쉬움

Go의 세트(set) 관용구를 사용하여 노래 컬렉션을 처리하고 각 플레이리스트에 대한 상세 정보를 표시하는 음악 플레이리스트 분석기를 구축하세요. 이 챌린지는 세트를 반복(iterate)하여 그 내용을 검토하고 보고하는 방법을 보여줍니다.

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

  • 쉼표로 구분된 록 노래가 포함된 문자열 (예: "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • 쉼표로 구분된 팝 노래가 포함된 문자열 (예: "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

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

  1. Go의 관용구인 map[string]struct{}를 사용하여 록 노래와 팝 노래를 별도로 저장할 두 개의 세트를 생성합니다.
  2. 두 입력 문자열을 쉼표 기준으로 분할하여 개별 노래 제목을 파싱합니다.
  3. 빈 구조체 리터럴 {}을 값으로 사용하여 각 노래를 해당 세트에 추가합니다.
  4. 록 플레이리스트 분석 내용을 표시합니다:
    • 헤더: "Rock Playlist Analysis:"
    • 개수: "Total rock songs: [count]"
    • 노래 헤더: "Songs in rock playlist:"
    • 각 노래를 별도의 줄에 표시: "♪ [song_title]"
  5. 팝 플레이리스트 분석 내용을 표시합니다:
    • 헤더: "Pop Playlist Analysis:"
    • 개수: "Total pop songs: [count]"
    • 노래 헤더: "Songs in pop playlist:"
    • 각 노래를 별도의 줄에 표시: "♪ [song_title]"
  6. 두 세트를 새로운 세트로 병합하여 통합 플레이리스트를 생성합니다.
  7. 통합 플레이리스트 분석 내용을 표시합니다:
    • 헤더: "Combined Playlist Analysis:"
    • 개수: "Total unique songs: [count]"
    • 노래 헤더: "All songs in combined playlist:"
    • 각 노래를 별도의 줄에 표시: "♫ [song_title]"
  8. 마지막으로 요약을 표시합니다:
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

strings 패키지를 사용하여 입력 문자열을 쉼표 기준으로 분할하세요. 각 세트를 반복하려면 단일 변수가 있는 for...range 루프를 사용하여 키(노래 제목)에만 접근하세요. 이 챌린지는 Go 세트를 반복하는 것이 컬렉션의 모든 요소를 검토할 수 있게 하여 분석 및 보고 작업에 어떻게 적합한지 보여줍니다.

치트 시트

Go에서 세트를 반복하려면, for...range 루프를 단일 변수와 함께 사용하여 키에만 접근하십시오:

for color := range colors {
    fmt.Println(color)
}

두 개의 변수 형식을 사용하고 명시적으로 값을 무시할 수도 있습니다:

for color, _ := range colors {
    fmt.Println(color)
}

Go의 맵은 반복할 때 특정 순서를 보장하지 않으므로, 프로그램을 실행할 때마다 세트 요소가 다른 순서로 나타날 수 있음에 유의하십시오.

직접 해보기

package main

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

func main() {
	// bufio.Scanner를 사용하여 전체 줄을 읽습니다 (공백이 포함된 노래 제목 처리)
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	rockSongs := scanner.Text()
	scanner.Scan()
	popSongs := scanner.Text()

	// Go 관용구인 map[string]struct{}를 사용하여 세트를 생성합니다
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// 입력 문자열을 파싱하고 세트를 채웁니다
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO: 아래에 코드를 작성하세요
	// 각 세트에 노래를 추가합니다
	// 락 플레이리스트 분석 결과 표시 (일관된 출력을 위해 노래 정렬)
	// 팝 플레이리스트 분석 결과 표시 (일관된 출력을 위해 노래 정렬)
	// 결합된 플레이리스트 분석 결과 생성 및 표시 (일관된 출력을 위해 노래 정렬)
	// 플레이리스트 요약 표시
	// 기억하세요: 일관된 순서를 위해 맵 키를 슬라이스로 변환하고 정렬한 다음 반복하세요

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨