Computer/Coding Test
Excercism - Building Telemetry (out, ref)
안녕도라
2026. 1. 23. 16:37
문제요약
RemoteControlCar가 있고, 이것을 사용하는 클라이언트가 있을 때 여러 정보(스폰서, 달린 거리)등을 보내줘라.
- SetSponsors(), DisplaySponsors()
- GetTelemetryData()
- GetBatteryUsagePerMeter()
https://exercism.org/tracks/csharp/exercises/building-telemetry/
Building Telemetry in C# on Exercism
Can you solve Building Telemetry in C#? Improve your C# skills with support from our world-class team of mentors.
exercism.org
난이도
Easy
풀이 포인트
- out, ref 키워드 잘 이해하고 사용하기
REVIEW
키워드가 붙었을 뿐, 파라미터라는 것은 같은데 사용이 어색해서 기록해둔다.
CODE
public class RemoteControlCar
{
private int batteryPercentage = 100;
private int distanceDrivenInMeters = 0;
private string[] sponsors = new string[0];
private int latestSerialNum = 0;
public void Drive()
{
if (batteryPercentage > 0)
{
batteryPercentage -= 10;
distanceDrivenInMeters += 2;
}
}
public void SetSponsors(params string[] sponsors)
{
this.sponsors = sponsors;
}
public string DisplaySponsor(int sponsorNum)
{
return sponsors[sponsorNum];
}
public bool GetTelemetryData(ref int serialNum,
out int batteryPercentage, out int distanceDrivenInMeters)
{
if (serialNum < this.latestSerialNum)
{
serialNum = this.latestSerialNum;
batteryPercentage = -1;
distanceDrivenInMeters = -1;
return false;
}
this.latestSerialNum = serialNum;
batteryPercentage = this.batteryPercentage;
distanceDrivenInMeters = this.distanceDrivenInMeters;
return true;
}
public static RemoteControlCar Buy()
{
return new RemoteControlCar();
}
}
public class TelemetryClient
{
private RemoteControlCar car;
public TelemetryClient(RemoteControlCar car)
{
this.car = car;
}
public string GetBatteryUsagePerMeter(int serialNum)
{
int battery = 0;
int distance = 0;
if(car.GetTelemetryData(ref serialNum, out battery, out distance)){
if(distance == 0) return "no data";
return $"usage-per-meter={(100 - battery)/distance}";
}
return "no data";
}
}