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미터지만, 이 작업들에서는 무시해도 돼요.
Plot 구조체의 구현을 완성해요. 이 구조체는 좌표 구조체 4개로 이루어져 있고, 생성자에서 이들을 받아요.
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
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
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))
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.