본문 바로가기

LANGUAGES, METHODLOGY

[Codility] LongestPassword - java.util.regex 를 활용해 조건을 만족하는 문자열 걸러내기

<LongestPassword> 


코딜리티에서 Indeed Prime 2015 Challenge 항목에 포함된 Task이다.



문제는 주어진 문자열에서 띄어쓰기로 분간된 암호들 중 주어진 조건을 만족하는 가장 긴 암호의 길이를 return하는 것이다.


암호의 조건은 숫자를 무조건 포함하며 홀수 개의 숫자만을 가지고, 짝수 개의 문자만을 가질 수 있다. 


입력 된 문자열에서 유효한 암호가 존재하지 않을 때에는 -1을 return 해주어야 한다.



InteliJ에서 실행 및 출력을 위해 직접 문자열을 정의해주었고


return 값을 return하지 않고 sout으로 출력하도록 하였다. 



처음에 아 드디어 됬다고 하다가 점수가 10점밖에 안나와서 뭐가 문제일까 하다가..


문자와 숫자에 걸린 홀수개 혹은 짝수개의 조건이 있던 것을 나중에 알았다.


여기에다 써보지 않았던 정규표현식과 java.util.regex를 사용하면서 이걸 어떻게 써야


암호 안의 모든 글자를 확인할까? 하는 중에 시간이 더 소요되기도 했다.


포인트는 .* [조건] .* 을 통해 문자의 어느부분만이 아닌 전 부분을 체크 할 수 있다는 것,


그리고 \W 나 등등의 정규표현식을 쓸때에는 역슬래시를 꼭 두 번을 써줘야 한다는 것이다.


이런류의 문제를 더 풀다보면 정규표현식에 더 익숙해질것 같기는 하다. 


보니까 인터넷상에서 유효한 이메일 혹은 암호, 등등 입력값 검사를 할때 많이 쓰는것 같다.



최종점수는 80%.


더 올려보고싶은 마음보다는 다른것 빨리빨리 풀어보자는 마음이 급하다..


< 코드 >



< 실행 결과 >




<코딜리티 점수 >