문제

MAC-48 주소를 표준 (IEEE 802) 형식은 하이픈으로 구분 된 2 개의 16 진수 숫자 (0 ~ 9 또는 A ~ F)의 6 개 그룹입니다 (예 : 01-23-45-67-89- AB).

 

풀이 : 내가 작성한 코드

하이픈 '-'을 기준으로 문자가 16진수로 변환했을 때 'F'를 넘어서는 안된다. (대소문자 다름'F'!='f')

'-'사이로 문자가 2개가 있어야 한다.

이 정도 조건문을 가지고 실행했을 경우 생각하지 못한 조건들이 있었다. 

1) '-'개수가 5개가 아닌 경우  ex) '-'하이픈이 아예 없을 경우에도 true를 반환 할 것이다. 

2) 문자열의 길이가 17이 아닌 경우  ex) "-----" 위 조건들만 있을 경우 이 하이픈만 있는 문자열도 true를 반환 할 것이다. 

첫 번째 if문 17개가 아닐경우를 체크한다.

마지막 return문에서 삼항연산자로 '-'이 6이상,0일때 체크해주고있다. (1번조건)

 

풀이 : 다른 사람이 작성 한 코드

string[ ] l = s.Split('-') : '-'을 기준으로 제외한 문자열을 배열에 담는다. ex) "00-1B-63-84-45-E6" => {00, 1B ,63 ,84 ,45 ,E6}

if(l.Length !=6 ) : '-'을 제외한 문자열의 길이가 6이 아니면 false

if (!(c.Length == 2 && ((c[i] >= '0' && c[i] <= '9') || (c[i] >= 'A' && c[i] <= 'F')))) : 배열의 요소인 문자열의 길이가 2이어야 하고, 0보다 같거나 크고 9보다 같거나 작거나 또는 A,F마찬가지로 비교한다. 

 

느낀점 : string.Split로 '-'를 없애면서 첫 번째 문자열의 길이를 체크하는if문을 없애고, 그 없앤 문자열을 가지고 비교를 좀 더 간단하게 비교가 가능해졌다.  if else가 많이 줄었다. 

반응형

+ Recent posts