트랙
/
R
R
/
연습 문제
/
라자냐
라자냐

라자냐

학습 연습 문제

소개

변수와 할당

R은 동적 타입 언어라서 일반적으로 변수의 타입을 지정할 필요가 없어요. 가장 권장되는 할당 연산자는 <-예요.

x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"

<- 대신 =를 사용해도 자주 동작하지만 항상 그런 것은 아니고, 좋지 않은 스타일이라 권장하지 않아요. RStudio에서 작업한다면 키보드 단축키 Alt-minus로 입력할 수 있어요.

연산자는 대부분 일반적인 언어와 비슷하지만, %/%와 %%는 눈여겨봐요:

2 + 3   # 5
2 - 3   # -1
2 * 3   # 6
2 / 3   # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3  # 2 (remainder)
2 ^ 3   # 8 (exponential)

R에서 #는 한 줄 주석을 시작해요. 여러 줄 주석을 위한 별도의 문법은 없어요.

함수

함수를 정의하려면 이렇게 해요:

squareit <- function(x) {
    x * x
}

함수는 인자를 하나도 받지 않거나 여러 개 받을 수 있고, 인자들은 쉼표로 구분해요. 매개변수가 하나도 없더라도 function()에는 괄호 ()가 필요해요.

함수 인자에는 기본값을 지정할 수 있어요. 다만 기본값이 있는 인자는 기본값이 없는 인자들 뒤에 와야 하고, 기본값을 지정할 때는 <-가 아니라 =를 사용해요. 별로 쓸모는 없지만 예를 하나 들어볼게요:

squareit <- function(x = 42) {
    x * x
}

squareit()
#> [1] 1764

한 줄짜리 함수 본문에는 중괄호 { }가 꼭 필요한 것은 아니지만, 포함하는 것이 좋은 스타일로 여겨져요.

R은 위 예제들처럼 함수의 마지막 값을 자동으로 반환해요.

return()을 함수 본문 어디에서든 사용해서 반환값을 명시적으로 지정할 수 있어요.

함수를 호출하는 방법은 다른 여러 언어와 같아요:

squareit(3)
#> [1] 9

지침

이 연습 문제에서는 좋아하는 요리책을 보고 멋진 라자냐를 만들 수 있도록 도와주는 코드를 작성해요.

라자냐를 조리하는 데 걸리는 시간과 관련된 네 가지 과제가 있어요.

1. 오븐에 있어야 할 예상 시간(분) 정의하기

매개변수를 받지 않고, 라자냐가 오븐에 있어야 하는 시간(분)을 반환하는 expected_minutes_in_oven() 함수를 정의해요. 요리책에 따르면 오븐에 있어야 할 예상 시간은 60분이에요.

> expected_minutes_in_oven()
[1] 60

2. 남은 오븐 시간(분) 계산하기

라자냐가 지금까지 오븐에 있던 실제 시간(분)을 매개변수로 받아서, 앞선 과제에서 구한 오븐에 있어야 할 예상 시간(분)을 기준으로 라자냐가 오븐에 더 있어야 하는 시간(분)을 반환하는 remaining_time_in_minutes 함수를 정의해요.

> remaining_time_in_minutes(50)
[1] 10

3. 준비 시간(분) 계산하기

라자냐에 넣은 층 수를 매개변수로 받아서, 각 층을 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 걸린 시간(분)을 반환하는 prep_time_in_minutes() 함수를 정의해요.

> prep_time_in_minutes(2)
[1] 4

4. 경과 시간(분) 계산하기

두 개의 인자를 받는 elapsed_time_in_minutes 함수를 정의해요. 첫 번째 인자는 라자냐에 넣은 층 수이고, 두 번째 매개변수는 라자냐가 오븐에 있던 시간(분)이에요. 이 함수는 라자냐 요리에 총 몇 분을 들였는지를 반환해야 하는데, 이는 준비 시간(분)과 현재까지 라자냐가 오븐에서 보낸 시간(분)을 더한 값이에요.

> elapsed_time_in_minutes(3, 20)
[1] 26
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
R Exercism

라자냐 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 R 트랙을 개념 21개연습 문제 111개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.