Menu
CoddyTech

합집합과 교집합

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()는 []입니다.

challenge icon

챌린지

쉬움

두 플레이어가 각각 몇 가지 기술을 잠금 해제했습니다. 프로그램은 첫 번째 플레이어의 기술과 두 번째 플레이어의 기술을 공백으로 구분해 두 줄로 읽고, 시작 코드는 집합 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

	# 합집합과 교집합을 구합니다

	# 결과를 출력합니다
quiz icon실력 점검

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

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 GDScript 컴파일러