트랙
/
C#
C#
/
연습 문제
/
루시안의 맛있는 라자냐
루시안의 맛있는 라자냐

루시안의 맛있는 라자냐

학습 연습 문제

소개

기본

C#은 정적 타입 언어예요. 즉, 컴파일 시점에 모든 것에 타입이 정해져 있어요. 이름에 값을 할당하는 것을 변수를 정의한다고 해요. 변수는 타입을 직접 지정해서 정의할 수도 있고, 할당된 값을 바탕으로 C# 컴파일러가 타입을 추론하게 할 수도 있어요(이를 _타입 추론_이라고 해요). 따라서 다음 두 변수 정의는 같은 의미예요:

int explicitVar = 10; // Explicitly typed
var implicitVar = 10; // Implicitly typed

변수의 값은 = 연산자로 바꿔요. 한 번 정의된 변수의 타입은 절대 바뀌지 않아요.

var count = 1; // Assign initial value
count = 2;     // Update to new value

// Compiler error when assigning different type
// count = false;

C#은 객체 지향 언어이고, 모든 함수를 클래스 안에 정의해야 해요. class 키워드로 클래스를 정의해요. 객체(또는 인스턴스)는 new 키워드로 만들어요.

class Calculator
{
    // ...
}

var calculator = new Calculator();

클래스 안의 함수를 _메서드_라고 해요. 각 메서드는 매개변수를 0개 이상 가질 수 있어요. 모든 매개변수는 타입을 명시해야 하고, 매개변수에는 타입 추론이 없어요. 마찬가지로 반환 타입도 명시해야 해요. 값은 return 키워드로 메서드에서 반환해요. 다른 파일의 코드에서 메서드를 호출할 수 있게 하려면 public 접근 제한자를 붙여야 해요.

class Calculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

메서드는 인스턴스에서 점(.) 문법으로 호출하며, 호출할 메서드 이름을 쓰고 메서드의 각 매개변수에 맞는 인자를 전달해요. 인자는 해당 매개변수의 이름을 지정해서 전달할 수도 있어요.

var calculator = new Calculator();
var sum_v1 = calculator.Add(1, 2);
var sum_v2 = calculator.Add(x: 1, y: 2);

C#의 스코프는 {와 } 문자 사이로 정의돼요.

C#은 두 가지 주석을 지원해요. 한 줄 주석은 //로 시작하고, 여러 줄 주석은 /*와 */ 사이에 넣어요.

지침

Lucian의 여자친구가 집으로 오는 길인데, Lucian은 아직 기념일 저녁 식사를 만들지 않았어요!

이 연습 문제에서는 Lucian이 가장 좋아하는 요리책을 보고 근사한 라자냐를 만들 수 있도록 코드를 작성해요.

라자냐를 만드는 데 걸리는 시간과 관련된 네 가지 작업이 있어요.

1. 오븐 예상 시간(분) 정의하기

매개변수를 받지 않고 라자냐를 오븐에 몇 분 동안 둬야 하는지를 반환하는 Lasagna.ExpectedMinutesInOven() 메서드를 정의해요. 요리책에 따르면 오븐에 둬야 하는 예상 시간은 40분이에요:

var lasagna = new Lasagna();
lasagna.ExpectedMinutesInOven();
// => 40

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

라자냐가 오븐에 들어가 있었던 실제 시간(분)을 매개변수로 받아서, 이전 작업에서 구한 오븐 예상 시간(분)을 기준으로 라자냐가 오븐에 앞으로 몇 분 더 있어야 하는지를 반환하는 Lasagna.RemainingMinutesInOven() 메서드를 정의해요.

var lasagna = new Lasagna();
lasagna.RemainingMinutesInOven(30);
// => 10

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

라자냐에 추가한 층의 개수를 매개변수로 받아서, 층 하나를 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 몇 분을 썼는지를 반환하는 Lasagna.PreparationTimeInMinutes() 메서드를 정의해요.

var lasagna = new Lasagna();
lasagna.PreparationTimeInMinutes(2);
// => 4

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

두 개의 매개변수를 받는 Lasagna.ElapsedTimeInMinutes() 메서드를 정의해요. 첫 번째 매개변수는 라자냐에 추가한 층의 개수이고, 두 번째 매개변수는 라자냐가 오븐에 있었던 시간(분)이에요. 이 메서드는 라자냐를 만드는 데 몇 분을 일했는지를 반환해야 해요. 이 값은 준비 시간(분)과 그 시점까지 라자냐가 오븐에 있었던 시간(분)을 더한 값이에요.

var lasagna = new Lasagna();
lasagna.ElapsedTimeInMinutes(3, 20);
// => 26
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

루시안의 맛있는 라자냐 문제를 시작해 볼 준비가 됐나요?

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