합집합과 교집합
Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 34번째.
두 집합은 일반적으로 두 가지 방식으로 결합할 수 있습니다:
- 합집합에는 어느 한 집합에라도 속하는 모든 원소가 포함됩니다.
- 교집합에는 두 집합 모두에 속하는 원소만 포함됩니다.
GDScript에는 이를 위한 연산자가 없으므로 루프를 사용해 구현합니다. 합집합을 만들려면 두 집합의 멤버를 새 집합에 추가합니다. 두 집합에 모두 있는 멤버는 같은 키에 저장됩니다:
var mia := {"forest": true, "cave": true}
var leo := {"cave": true, "tower": true}
var either := {}
for place in mia:
either[place] = true
for place in leo:
either[place] = true
print(either.keys()) # ["forest", "cave", "tower"]모든 값이 true이므로 merged()는 한 번 호출해도 동일한 합집합을 제공합니다: var either := mia.merged(leo). 새 딕셔너리를 반환하고 mia는 변경하지 않습니다.
교집합을 구하려면 한 집합을 순회하면서 다른 집합에도 있는 원소를 유지하세요:
var both := {}
for place in mia:
if leo.has(place):
both[place] = true
print(both.keys()) # ["cave"]집합에 공통 원소가 없으면 교집합은 비어 있고 both.keys()는 []입니다.
챌린지
쉬움두 플레이어가 각각 몇 가지 기술을 잠금 해제했습니다. 프로그램은 첫 번째 플레이어의 기술과 두 번째 플레이어의 기술을 공백으로 구분해 두 줄로 읽고, 시작 코드는 집합 first와 second를 만듭니다.
두 집합의 합집합과 교집합을 출력하세요. 원소는 , 로 연결합니다.
All skills:뒤에 합집합을 출력합니다. 첫 번째 플레이어의 기술을 출력한 다음, 두 번째 플레이어의 새로운 기술을 출력합니다.Shared skills:뒤에 교집합을 출력합니다. 첫 번째 플레이어의 순서를 따르며, 공유하는 기술이 없으면none을 출력합니다.
입력이 다음과 같을 때:
jump dash
dash swim출력은 다음과 같습니다.
All skills: jump, dash, swim
Shared skills: dash직접 해보기
extends Node
func _ready():
var first := {}
for skill in OS.read_string_from_stdin().split(" ", false):
first[skill] = true
var second := {}
for skill in OS.read_string_from_stdin().split(" ", false):
second[skill] = true
# 합집합과 교집합을 구합니다
# 결과를 출력합니다
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러