요구사항:
다음과 같은 범위가 주어졌을 때, 특정 값이 이 범위들 중 하나에 포함되는지 빠르게 확인하는 방법이 필요합니다.
- 0x0020~0x007F
- 0x00A0~0x017F
- 0x01A0~0x01CF
- 0x01F0~0x01FF
- 0x0210~0x021F
- 0x1EA0~0x1EFF
해결 방안
객체 지향 접근 방식 사용
1. 각 범위에 최소값과 최대값을 가지는 클래스 정의
public class RangeInterval
{
public RangeInterval(int lowerBound, int upperBound)
{
LowerBound = lowerBound;
UpperBound = upperBound;
}
/// <summary>
/// 최소값 저장
/// </summary>
public int LowerBound { get; set; }
/// <summary>
/// 최대값 저장
/// </summary>
public int UpperBound { get; set; }
}
2. 데이터 초기화
private static readonly List<RangeInterval> definedIntervals;
static DataValidator()
{
definedIntervals = new List<RangeInterval>
{
new RangeInterval(0x0020, 0x007F),
new RangeInterval(0x00A0, 0x017F),
new RangeInterval(0x01A0, 0x01CF),
new RangeInterval(0x01F0, 0x01FF),
new RangeInterval(0x0210, 0x021F),
new RangeInterval(0x1EA0, 0x1EFF)
};
}
LINQ를 사용한 범위 검증 메서드
/// <summary>
/// 값이 유효한 범위에 속하는지 확인
/// </summary>
/// <param name="targetValue">검사할 값</param>
/// <returns>True: 유효한 범위에 있음, False: 유효한 범위에 없음</returns>
public static bool IsWithinValidRange(int targetValue)
{
return definedIntervals.Any(interval =>
targetValue >= interval.LowerBound &&
targetValue <= interval.UpperBound);
}
메서드 호출 예시
static void Main(string[] args)
{
while (true)
{
Console.Write("16진수 값을 입력하세요: ");
var userInput = Console.ReadLine();
if (userInput == "q")
{
break;
}
var numericValue = 0;
var isValidFormat = int.TryParse(userInput.ToUpper(),
NumberStyles.AllowHexSpecifier, null, out numericValue);
if (isValidFormat)
{
Console.WriteLine("{0}: {1}",
userInput,
IsWithinValidRange(numericValue) ? "유효한 범위에 속함" : "유효한 범위에 속하지 않음");
}
else
{
Console.WriteLine("잘못된 입력 형식입니다");
}
}
}