트랙
/
Elm
Elm
/
연습 문제
/
Mario의 멋진 라자냐
Mario의 멋진 라자냐

Mario의 멋진 라자냐

학습 연습 문제

소개

let

let 표현식은 지역 스코프를 만들 때 사용하며, 몇 가지 상황에서 유용해요:

  • 표현식을 단순하게 만들 때
  • 중간 표현식의 결과에 이름을 붙일 때
  • 표현식이 커지면 더 작은 조각으로 나눌 때

let 표현식 안에서는 구조 분해를 비롯해 대부분의 작업을 할 수 있어요. 구조 분해에 대한 자세한 내용은 이후 연습 문제에서 다뤄요. 하지만 새로운 커스텀 타입이나 타입 별칭을 정의할 수는 없어요.

let
  cube x = x * x * x
in
  cube a + cube b + cube c
beginWithPattern : Size -> Padding -> Pattern -> GameOfLife
beginWithPattern minimumSize padding pattern =
    let
        size = calculateSize minimumSize padding pattern

        center = Size.center size

        centeredPattern = Pattern.centerAt center pattern

        dimensions = { width = size, height = size }

        deadCells = Matrix.create dimensions Dead
    in
    GameOfLife (bringPatternToLife deadCells centeredPattern)

지침

생일 선물로 새 요리책을 받았는데, 그 안에 담긴 라자냐 조리법이 지금 가장 아끼는 요리책의 것보다 더 나은지 알아보고 싶어요. 이 연습 문제에서는 새 요리책에 있는 라자냐를 만드는 데 도움이 될 코드를 작성해 볼 거예요.

룸메이트는 아직 사무실에서 일하느라 바쁜데, 제시간에 돌아올 수 있도록 라자냐가 언제 완성될지 알고 싶어 해요.

1. 라자냐가 언제 완성될지 계산하기

라자냐가 언제 완성될지 계산하는 함수를 만들어 봐요. 코드를 간결하고 표현력 있게 만들려면 let 표현식을 사용하는 게 좋아요.

매개변수 두 개를 받고 let 표현식을 본문으로 가지는 remainingTimeInMinutes 함수를 정의해요. 첫 번째 매개변수는 라자냐의 층수이고, 두 번째 매개변수는 요리를 시작한 뒤 지난 분 수예요.

let 표현식의 let 부분에서 expectedMinutesInOven을 정의해서, 라자냐를 오븐에 몇 분 동안 넣어 두어야 하는지 확인해요. 요리책에 따르면, 오븐에 넣어 두어야 하는 예상 시간은 40분이에요.

expectedMinutesInOven
    --> 40

let 표현식의 let 부분에서 preparationTimeInMinutes를 정의해요. 이 함수는 라자냐의 층수를 매개변수로 받아서, 각 층을 준비하는 데 2분이 걸린다고 가정할 때 라자냐를 준비하는 데 몇 분이 걸리는지 반환해요.

preparationTimeInMinutes 3
    --> 6

let 표현식의 in 부분에서 라자냐가 완성될 때까지 몇 분이 남았는지 반환해요. 이 값은 preparationTimeInMinutes와 expectedMinutesInOven을 더한 값에서 요리를 시작한 뒤 지난 분 수를 뺀 것이에요.

remainingTimeInMinutes 3 10
    --> 6 + 40 - 10 = 36
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elm Exercism

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

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