부분집합과 상위집합
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 21번째.
집합을 결합하는 것 외에도, 집합들을 비교할 수도 있습니다.
isSubset(of:)는 "나의 모든 요소가 다른 집합에도 포함되어 있는가?"라는 질문에 답합니다.
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true
big.isSubset(of: small) // falseisSuperset(of:)은 그 반대로, "내가 다른 세트의 모든 요소를 포함하고 있는가?"를 확인합니다:
big.isSuperset(of: small) // trueisDisjoint(with:)는 두 세트가 요소를 전혀 공유하지 않을 때 true를 반환합니다:
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true이 세 가지 서술어는 수동으로 루프를 작성하지 않고도 "필수 권한"이나 "all-of" / "none-of" 규칙을 표현하는 가장 깔끔한 방법입니다.
챌린지
중급문서에 대한 액세스 권한을 확인하고 있습니다. 다음 세 줄을 읽으십시오:
- 사용자의 권한 (쉼표로 구분)
- 필수 권한 (쉼표로 구분)
- 금지된 권한 (쉼표로 구분)
사용자에게 액세스 권한이 부여되는 조건은 다음과 같습니다:
- 사용자의 권한이 필수 권한의 상위 집합(superset)인 경우 (모든 필수 권한을 보유함)
- 사용자의 권한이 금지된 권한과 서로소(disjoint)인 경우
다음 중 정확히 하나를 출력하십시오:
granted- 필수 권한이 누락된 경우
missing: <...>(정렬됨, 쉼표로 구분). 금지된 권한을 보유하고 있더라도 이 메시지를 출력합니다. - 누락된 필수 권한은 없지만 금지된 권한을 보유한 경우
forbidden: <...>(정렬됨, 쉼표로 구분)
입력이 read,write,admin / read,write / delete인 경우, 출력은 granted입니다.
입력이 read / read,write / delete인 경우, 출력은 missing: write입니다.
치트 시트
Swift의 세트(Set) 비교 메서드:
let small: Set = [1, 2]
let big: Set = [1, 2, 3, 4]
small.isSubset(of: big) // true – small의 모든 요소가 big에 포함됨
big.isSuperset(of: small) // true – big이 small의 모든 요소를 포함함
let evens: Set = [2, 4, 6]
let odds: Set = [1, 3, 5]
evens.isDisjoint(with: odds) // true – 공유하는 요소가 없음직접 해보기
let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))
// TODO: 허용됨 | 누락됨: ... | 금지됨: ...
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.