요약 - 고유한 사용자 이름
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 37번째.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움Go의 set 관용구(idiom)를 사용하여 중복 사용자 이름을 방지하는 사용자 이름 등록 시스템을 구축하세요. 이 챌린지는 모든 등록 과정에서 사용자 이름의 고유성을 보장하는 견고한 사용자 관리 시스템을 만드는 방법을 보여줍니다.
두 개의 입력을 받게 됩니다:
- 쉼표로 구분된 기존 사용자 이름이 포함된 문자열 (예:
"alice123,bob_dev,charlie2024,diana_codes") - 쉼표로 구분된 새로운 사용자 이름 등록 시도가 포함된 문자열 (예:
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
당신의 과제는 다음과 같습니다:
- Go의 관용구인
map[string]struct{}를 사용하여 등록된 사용자 이름을 저장할 set을 생성합니다. - 첫 번째 입력 문자열을 쉼표 기준으로 분리하여 기존 사용자 이름을 파싱합니다.
- 빈 구조체 리터럴인
{}를 값으로 사용하여 각 기존 사용자 이름을 set에 추가합니다. - 두 번째 입력 문자열을 쉼표 기준으로 분리하여 새로운 등록 시도들을 파싱합니다.
- 각 등록 시도에 대해, comma ok 관용구를 사용하여 사용자 이름이 이미 set에 존재하는지 확인합니다.
- 각 시도에 대한 등록 프로세스를 표시합니다:
- 사용자 이름을 사용할 수 있는 경우:
"Registered: [username]"를 출력하고 set에 추가합니다. - 사용자 이름이 이미 존재하는 경우:
"Username taken: [username]"를 출력합니다.
- 사용자 이름을 사용할 수 있는 경우:
- 모든 등록 시도를 처리한 후, 종합 요약을 표시합니다:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- 마지막으로, 시스템에 등록된 모든 사용자 이름을 나열합니다:
- 헤더:
"All registered usernames:" - 각 사용자 이름을 별도의 줄에 표시:
"@[username]"
- 헤더:
입력 문자열을 쉼표로 분리하기 위해 strings 패키지를 사용하세요. 이 챌린지는 Go의 set 관용구가 사용자 등록 시스템에서 중복을 방지하기 위한 효율적인 솔루션을 어떻게 제공하는지 보여주며, 사용자 이름 유효성 검사를 위한 빠른 조회 성능을 제공하는 동시에 데이터 무결성을 보장합니다.
직접 해보기
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// 입력 읽기
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// 입력 문자열 파싱
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// Go 관용구를 사용하여 세트 생성
userSet := make(map[string]struct{})
// TODO: 아래에 코드를 작성하세요
// 1. 기존 사용자 이름을 세트에 추가
// 2. 각 등록 시도 처리
// 3. 각 시도에 대한 등록 결과 표시
// 4. 요약 계산 및 표시
// 5. 등록된 모든 사용자 이름 나열 (일관된 출력을 위해 정렬 필요)
}