공부/알고리즘&자료구조

항해99 문제17번풀이 (문자열다루기 기본,프로그래머스)

youngble 2021. 11. 8. 19:48

https://programmers.co.kr/learn/courses/30/lessons/12918

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr

 

 

내가 푼식 :

 

풀이 :

 2줄. 입력문자열 s의 길이가 1이상 8이하일때 동작하는 if문

 3줄. 변수 reg 에 .match() 를 정규식 /\D/g (해당 문자열 전역범위에 대응) 과 같이 사용하여, 만약 문자열이 없다면 null 값을 출력한다.

 4줄. s 문자열이 4개 또는 6 이고 reg가 문자열을 갖지 않았다면 null 일때 실행하는 조건문 

 5줄. 모든 조건이 만족했다면 문자없이 4자리 혹은 6자리의 숫자로만 이루워진 string 이므로 true 를 리턴

 7줄. 만약 조건을 만족하지 않았다면 false를 리턴

 9줄. 마찬가지로 문자열 길이를 만족하지않았다면 false를 리턴

 

 

실패했던 방식:

 isNaN을 사용하여 숫자와문자가 합쳐진것을 Number()바꿨을때 값이 NaN으로 뜨는데 true 면 문자와숫자가 썪인것이고,

false라면 NaN이 아니란 뜻이니 숫자만 있다는 뜻이다 하지만 프로그래머스에서 코드케이스11이 실패를 뜨는데 이유는

지수를 나타내는 e 가 숫자로 인식이 되는데 예를들어 "1e22"라고한다면 이를 지수함수 숫자로 인식하기때문이다.

 

다른사람풀이:

더보기

아직 제대로 보지않았지만 정규식을 이용하였는데 대충보면 \d 를 사용하여 숫자에 대응하게하고 이때 {6}$  을쓰는데 원래 조건이 6자리가 필요하므로 이것은 6자리를 나타내는 정수를 나타낸다고 생각한다 그리고 | 을 이용하여 or 를 쓰고 똑같이 4자리의 숫자에 대응 하는 값을 regex 라는 변수에 넣어준것이다. 만약 숫자로만 이루워졌다면 .test일때 boolean 값으로 출력하는데 s 인자의 문자열 값이 regex 가 나태는것을 대응한다면 true 를 낼것이고 아니라면 false일것이다.  

이를 통해 정규표현식(정규식) 을 공부해서 모두 알아야겠다고 생각하게 되었다.