Menu
CoddyTech

복습 - 사용자 정의 리스트

Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 34번째.

challenge icon

챌린지

중급

CustomList를 custom_list.gd에 작성하세요. 비공개 Array _items를 감싸고, 메서드와 가상 메서드를 통해 리스트에 필요한 기능을 제공하는 클래스입니다.

  • _init(items = [])는 items의 복사본을 저장하므로, 전달한 Array를 나중에 변경해도 리스트에는 영향을 주지 않습니다.
  • append(item)은 끝에 항목을 추가합니다. pop_back()은 마지막 항목을 제거하고 반환하며, 리스트가 비어 있으면 null을 반환합니다.
  • get_at(index)는 항목을 반환하며, 인덱스가 0부터 size() - 1 범위를 벗어나면 null을 반환합니다. set_at(index, value)는 항목을 바꾸고 true를 반환하며, 인덱스가 리스트 범위를 벗어나면 false를 반환합니다.
  • size(), has(item), clear()는 같은 이름의 Array 메서드처럼 동작합니다.
  • concat(other)는 + 연산자 대신 사용합니다. 이 리스트의 항목 뒤에 other의 항목이 이어진 새 CustomList를 반환하며, 어느 리스트도 변경하지 않습니다.
  • _to_string()은 Array가 출력되는 방식으로 항목을 반환합니다. 예: [3, 1, 4].
  • _iter_init(), _iter_next(), _iter_get()을 사용하면 for 루프로 항목을 순회할 수 있습니다.

제공된 코드는 시작 숫자를 읽고(한 줄에 공백으로 구분되며, 비어 있을 수도 있음), 리스트를 만든 다음, 전달한 Array에 99를 추가하고 리스트를 출력합니다. 그런 다음 명령 개수를 읽고 한 줄에 하나씩 명령을 실행합니다: append N, pop, get I, set I N, has N, size, sum(리스트를 순회하는 for 루프), clear, concat N N .... 다음 입력의 경우:

3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2

다음과 같이 출력됩니다:

[3, 1, 4]
[3, 1, 4, 1]
Item 2: 4
No item at 9
[5, 1, 4, 1]
Has 4: true
Sum: 11
Popped 1
[5, 1, 4] + [9, 2] = [5, 1, 4, 9, 2]

코드는 custom_list.gd에 작성하세요. main.gd에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

extends Node

func _ready():
	# 제공된 입력/출력 코드: 그대로 유지하세요
	var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
	var list := CustomList.new(numbers)
	# list는 자체 복사본을 유지해야 합니다
	numbers.append(99)
	print(list)
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		match parts[0]:
			"append":
				list.append(int(parts[1]))
				print(list)
			"pop":
				var item = list.pop_back()
				print("Empty" if item == null else "Popped %d" % item)
			"get":
				var item = list.get_at(int(parts[1]))
				print(("No item at " + parts[1]) if item == null else "Item %s: %d" % [parts[1], item])
			"set":
				if list.set_at(int(parts[1]), int(parts[2])):
					print(list)
				else:
					print("No item at " + parts[1])
			"has":
				print("Has %s: %s" % [parts[1], list.has(int(parts[1]))])
			"size":
				print("Size: %d" % list.size())
			"sum":
				var total := 0
				for item in list:
					total += item
				print("Sum: %d" % total)
			"clear":
				list.clear()
				print(list)
			"concat":
				var other := CustomList.new(to_numbers(parts.slice(1)))
				print("%s + %s = %s" % [list, other, list.concat(other)])

func to_numbers(words: PackedStringArray) -> Array:
	var result := []
	for word in words:
		result.append(int(word))
	return result

객체 지향 프로그래밍의 모든 레슨

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