트랙
/
C#
C#
/
연습 문제
/
우주 영토 쟁탈전
우주 영토 쟁탈전

우주 영토 쟁탈전

학습 연습 문제

소개

구조체

C#의 struct는 class와 밀접한 관련이 있어요. 상태와 동작을 가지고 있고, 인자를 받는 생성자도 있어요. 인스턴스는 할당할 수 있고, 동등성을 검사할 수 있으며, 컬렉션에 저장할 수 있어요.

enum Unit
{
    Kg,
    Lb
}
struct Weight
{
    private double count;
    private Unit unit;

    public Weight(double count, Unit unit)
    {
        this.count = count;
        this.unit = unit;
    }

    public override string ToString()
    {
        return count.ToString() + unit.ToString();
    }
}

new Weight(77.5, Unit.Kg).ToString();
// => "77.6Kg"

지침

Isaacs Asteroid Exploration Co.의 소유권 신청 부서로부터 토지 소유권 신청 시스템의 성능을 개선해 달라는 임무를 받았어요.

새로운 소행성이 개발 준비를 마칠 때마다 투기꾼들이 땅 한 구획에 대한 소유권을 신청할 수 있어요. 소행성의 땅은 네 변으로 이루어진 구획들로 나뉘어 있어요. 투기꾼들은 구획의 치수를 지정해서 땅을 신청해요.

목표는 과거에 웹사이트가 다운되게 만들었던 신청 폭주를 처리할 수 있는 성능 좋은 시스템을 개발하는 거예요.

측정 단위는 100미터지만, 이 작업들에서는 무시해도 돼요.

1. Plot 정의하기

Plot 구조체의 구현을 완성해요. 이 구조체는 좌표 구조체 4개로 이루어져 있고, 생성자에서 이들을 받아요.

2. 투기꾼이 치수로 식별되는 구획을 지정해 신청할 수 있게 하기

ClaimsHandler.StakeClaim() 메서드를 구현해서 신청을 등록할 수 있게 해요.

ClaimsHandler.IsClaimStaked() 메서드를 구현해서 신청이 등록되었는지 확인해요.

var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsClaimStaked(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true

3. 현재 신청이 마지막 신청과 같은지 확인하기

ClaimsHandler.IsLastClaim() 메서드를 구현해서 현재 신청을 이전 신청과 비교해요.

var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.IsLastClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
// => true

4. 연구 목적으로 가장 긴 변을 가진 신청된 구획 찾기

ClaimsHandler.GetClaimWithLongestSide() 메서드를 구현해서 등록된 모든 신청을 살펴보고 가장 긴 변을 가진 구획을 반환해요. 구획의 좌표 데이터는 항상 연속된 직사각형 모양임이 보장돼요.

var ch = new ClaimsHandler();
ch.StakeClaim(new Plot(new Coord(1,1), new Coord(2,1), new Coord(1,2), new Coord(2,2)));
ch.StakeClaim(new Plot(new Coord(10,1), new Coord(20,1), new Coord(10,2), new Coord(20,2)));
ch.GetClaimWithLongestSide();
// => new Plot(new Coord(1,1), new Coord(20,1), new Coord(1,2), new Coord(2,2))
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
C# Exercism

우주 영토 쟁탈전 문제를 시작해 볼 준비가 됐나요?

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