Machineboy空

Excercism - Building Telemetry (out, ref) 본문

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";
    }
}