Menu
Coddy logo textTech

부분집합과 상위집합

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)            // false

isSuperset(of:)은 그 반대로, "내가 다른 세트의 모든 요소를 포함하고 있는가?"를 확인합니다:

big.isSuperset(of: small)          // true

isDisjoint(with:)는 두 세트가 요소를 전혀 공유하지 않을 때 true를 반환합니다:

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds)       // true

이 세 가지 서술어는 수동으로 루프를 작성하지 않고도 "필수 권한"이나 "all-of" / "none-of" 규칙을 표현하는 가장 깔끔한 방법입니다.

challenge icon

챌린지

중급

문서에 대한 액세스 권한을 확인하고 있습니다. 다음 세 줄을 읽으십시오:

  1. 사용자의 권한 (쉼표로 구분)
  2. 필수 권한 (쉼표로 구분)
  3. 금지된 권한 (쉼표로 구분)

사용자에게 액세스 권한이 부여되는 조건은 다음과 같습니다:

  • 사용자의 권한이 필수 권한의 상위 집합(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: 허용됨 | 누락됨: ... | 금지됨: ...
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨