https://www.codewars.com/kata/526989a41034285187000de4/csharp
이번 문제도 5kyu스럽지 않은 간단한 산술 문제이며, C#으로 구현했습니다.
2개의 IP주소를 주고, 그 범위 사이에 몇 개의 IP주소가 있는지 세어서 반환하라는 문제입니다.
10.0.0.0
, 10.0.0.50
이 주어지면, 두 번째를 포함하지 않기에 50을 반환하면 됩니다.
풀이도 단순하게 ip 주소의 각 항을 빼서 더하되, order를 256 x 256 x 256에서 시작하여, 단계를 마다 256를 나누어 order를 조절하는 부분이 중요합니다.
IP 주소의 체계를 이해하거나, 아니면 .NET 의 network관련 라이브러리IPAddress.NetworkToHostOrder
를 사용하면 조금 더 간단하게 할 수 있는데 이 부분을 물어보는 문제가 아닌가 싶습니다.
저는 그냥 파싱해서 풀었습니다.
최근 몇 일 계속 추천으로 걸리는 문제가 간단한 문제만 나오네요.
public class CountIPAddresses
{
public static long IpsBetween(string start, string end)
{
long ret = 0;
string[] f1 = start.Split('.');
string[] f2 = end.Split('.');
long order = 256 * 256 * 256;
for (int i = 0; i < 4; ++i)
{
long i1 = long.Parse(f1[i]);
long i2 = long.Parse(f2[i]);
long d = i2 - i1;
ret += d * order;
order/= 256;
}
return ret;
}
}