복습 - 사용자 정의 리스트
Coddy GDScript 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 65개 중 34번째.
챌린지
중급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 컴파일러