본문 바로가기
CodeSignal

Is MAC48 Address?

by Doromi 2024. 1. 3.
728x90
반응형

주어진 문자열이 MAC-48 주소 형식에 부합하는지 여부를 확인하는 것입니다.

MAC-48 주소는 네트워크 인터페이스를 식별하는 데 사용되는 고유한 식별자로, 휴먼 프렌들리한 형태로 표현될 때 여섯 그룹의 두 자리 16진수 숫자로 구성됩니다. 각 그룹은 하이픈(-)으로 구분되어 있습니다.

예를 들어, 유효한 MAC-48 주소는 다음과 같은 형태입니다: "01-23-45-67-89-AB".

문제에서 주어진 inputString이 MAC-48 주소 형식에 부합하는지 확인하는 함수를 작성해야 합니다. 유효한 MAC-48 주소의 특징은 다음과 같습니다:

길이는 정확히 17이어야 합니다.
그룹 간의 구분자는 하이픈(-)이어야 합니다.
각 그룹은 두 자리 16진수여야 합니다.
문자열이 위 조건을 모두 만족하면 true를 반환하고, 그렇지 않으면 false를 반환해야 합니다.

문제의 예시에서 "00-1B-63-84-45-E6"은 유효한 MAC-48 주소 형식이므로 true를 반환하고, "Z1-1B-63-84-45-E6" 및 "not a MAC-48 address"는 유효하지 않으므로 false를 반환합니다.

 

bool solution(string inputString) {
    string[] stArr = inputString.Split('-');
    if(stArr.Length != 6) return false;
    foreach(string s in stArr){
        if(s.Length != 2) return false;
        if(!Char.IsLetterOrDigit(s[0])) return false;
        if(!Char.IsLetterOrDigit(s[1])) return false;
        if(Char.IsLetter(s[0]) && (Convert.ToInt32(s[0]) < 65 || Convert.ToInt32(s[0]) > 70) ) return false;
        if(Char.IsLetter(s[0]) && Convert.ToInt32(s[0]) > 70 && (Convert.ToInt32(s[0]) < 97 || Convert.ToInt32(s[0]) > 102) ) return false;
        if(Char.IsLetter(s[1]) && (Convert.ToInt32(s[1]) < 65 || Convert.ToInt32(s[1]) > 70) ) return false;
        if(Char.IsLetter(s[1]) && Convert.ToInt32(s[0]) > 70 && (Convert.ToInt32(s[1]) < 97 || Convert.ToInt32(s[1]) > 102) ) return false;
    }
    return true;
}
string[] stArr = inputString.Split('-');: 입력 문자열을 하이픈(-)으로 나눠서 각 그룹을 배열에 저장합니다.

if(stArr.Length != 6) return false;: 그룹의 수가 6이 아니면 MAC-48 주소 형식에 부합하지 않으므로 false를 반환합니다.

foreach(string s in stArr) { ... }: 각 그룹에 대한 반복문입니다.

if(s.Length != 2) return false;: 각 그룹의 길이가 2가 아니면 MAC-48 주소 형식에 부합하지 않으므로 false를 반환합니다.

if(!Char.IsLetterOrDigit(s[0])) return false;: 각 그룹의 첫 번째 문자가 영숫자가 아니면 false를 반환합니다.

if(!Char.IsLetterOrDigit(s[1])) return false;: 각 그룹의 두 번째 문자가 영숫자가 아니면 false를 반환합니다.

if(Char.IsLetter(s[0]) && (Convert.ToInt32(s[0]) < 65 || Convert.ToInt32(s[0]) > 70)): 첫 번째 문자가 알파벳이면서 ASCII 코드값이 65보다 작거나 70보다 크면 false를 반환합니다.

if(Char.IsLetter(s[0]) && Convert.ToInt32(s[0]) > 70 && (Convert.ToInt32(s[0]) < 97 || Convert.ToInt32(s[0]) > 102)): 첫 번째 문자가 알파벳이면서 ASCII 코드값이 70보다 크고, 97보다 작거나 102보다 크면 false를 반환합니다.

if(Char.IsLetter(s[1]) && (Convert.ToInt32(s[1]) < 65 || Convert.ToInt32(s[1]) > 70)): 두 번째 문자가 알파벳이면서 ASCII 코드값이 65보다 작거나 70보다 크면 false를 반환합니다.

if(Char.IsLetter(s[1]) && Convert.ToInt32(s[0]) > 70 && (Convert.ToInt32(s[1]) < 97 || Convert.ToInt32(s[1]) > 102)): 두 번째 문자가 알파벳이면서 ASCII 코드값이 70보다 크고, 97보다 작거나 102보다 크면 false를 반환합니다.

모든 검사를 통과하면 true를 반환합니다. 즉, 주어진 문자열이 MAC-48 주소 형식에 부합하는 경우에만 true가 반환됩니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

chessKnight  (0) 2024.01.05
lineEncoding  (0) 2024.01.04
Elections Winners  (0) 2024.01.01
buildPalindrome  (0) 2023.12.31
isBeautifulString  (0) 2023.12.31