Menu
Coddy logo textTech

학생 추가

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 22번째.

이 프로젝트에서는 한 줄에 하나씩 명령을 읽고 각각에 응답하는 성적 기록부를 만듭니다. 다섯 단계에 걸쳐 학생을 추가하고, 성적을 기록하고, 평균을 보고하고, 최우수 학생을 찾는 방법을 배웁니다. 각 단계는 동일한 gradebook(commands) 함수를 확장합니다.

ADD ada
GRADE ada 90
AVG ada
REPORT
TOP

성적은 이름이 지정된 목록에 저장됩니다. 각 학생의 이름은 해당 학생의 성적을 담은 숫자형 벡터에 매핑됩니다. 모든 학생이 여러 값을 가지므로 목록이 적합합니다.

grades <- list()
grades[["ada"]] <- numeric(0)
grades[["ada"]] <- c(grades[["ada"]], 90)
print(length(grades[["ada"]]))
print(names(grades))

출력:

[1] 1
[1] "ada"

numeric(0)은 빈 숫자형 벡터입니다. 여기서 c()를 할당하는 것은 작동하지 않습니다. NULL이므로, NULL을 할당하면 목록 항목이 제거됩니다.

각 명령은 공백을 기준으로 나뉘므로, parts[1]은 명령이고 parts[2]는 이름입니다. if / else if 연쇄가 수행할 작업을 선택합니다:

for (cmd in commands) {
  parts <- strsplit(cmd, " ")[[1]]
  name <- parts[2]
  if (parts[1] == "ADD") {
    # ADD 처리
  }
}

응답은 replies <- c(replies, ...)를 사용해 수집한 후 마지막에 반환합니다.

challenge icon

챌린지

쉬움

첫 번째 명령을 처리하도록 gradebook(commands)를 완성하세요:

  • ADD <name>: 학생이 새 학생이면 성적 없이 저장하고 added <name>라고 응답하세요. 이름이 이미 저장되어 있으면 <name> already exists라고 응답하세요.

제공된 코드는 각 입력 줄을 하나의 명령으로 gradebook()에 전달하고, 반환된 각 응답을 한 줄씩 출력합니다. 이름은 소문자 한 단어이며, 입력에는 지금까지 설명한 명령만 포함됩니다.

직접 해보기

gradebook <- function(commands) {
  grades <- list()
  replies <- c()
  for (cmd in commands) {
    parts <- strsplit(cmd, " ")[[1]]
    name <- parts[2]
    # 여기에 코드를 작성하세요
  }
  replies
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
cat(gradebook(input), sep = "\n")
quiz icon실력 점검

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

논리와 흐름의 모든 레슨

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