문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.
제한 사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
입출력 예
a234 | false |
1234 | true |
< 내 풀이 >
class Solution { public boolean solution(String s) { char[] chars = s.toCharArray(); boolean answer = true; if (chars.length == 4 || chars.length == 6) { for(int i=0; i<chars.length; i++) { if(chars[i]>=(char)65 && chars[i]<=(char)122) { answer = false; break; } } } else answer = false; System.out.println(answer); return answer; } } |
< 다른 사람의 풀이 1 >
class Solution { public boolean solution(String s) { if(s.length() == 4 || s.length() == 6){ try{ int x = Integer.parseInt(s); return true; } catch(NumberFormatException e){ return false; } } else return false; } } |
try~catch 이용하여 s를 int형으로 변환시키고
int형으로 변환될 수 없는 예외(NumberFormatException)가 발생한 경우 false를 return.
* NumberFormatException : Integer.parseint()를 사용하여 String -> int 형변환 시 int형으로 변환할 수 없는 String값이 있을 경우
< 다른 사람의 풀이 2 >
import java.util.*; class Solution { public boolean solution(String s) { if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)"); return false; } } |
* matches() 메소드
: 문자열에서 특정 문자열이 포함되었는지 검사할 때 유용한 메소드
: matches()에 정의된 정규식일치하면 true, 일치되지 않으면 false를 반환. (boolean 값을 반환. )
: String 클래스의 matches 메소드는 정규식을 만족하는지 확인하는 메소드.
^ : 문자열의 시작
$ : 문자열의 종료
. : 임의의 한 문자 (문자의 종류 가리지 않음)
단, \ 는 넣을 수 없음
* : 앞 문자가 없을 수도 매우 많을 수도(무한) 있음
+ : 앞 문자가 하나 이상
? : 앞 문자가 없거나 하나있음
[] : 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냄
[]내에서 ^가 선행하여 존재하면 not 을 나타냄
{} : 횟수 또는 범위를 나타냄
() : 괄호 안의 문자를 하나의 문자로 인식
| : 패턴 안에서 or 연산을 수행할 때 사용
\s : 공백 문자
\S : 공백 문자가 아닌 나머지 문자
\w : 알파벳이나 숫자
\W : 알파벳이나 숫자를 제외한 문자
\d : 숫자 [0-9]와 동일
\D : 숫자를 제외한 모든 문자
\ : 정규표현식 역슬래시(\)는 확장 문자
역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
(?i) : 앞 부분에 넣어주면 대소문자를 구분하지 않음
( \ : 역슬래쉬 )
[출처] String 클래스 matches 메소드 예제.1|작성자 Yeriel
따라서 풀이의 s.matches("(^[0-9]*$)"); 는
( ) 에 정의된 0부터 9까지의 숫자로만 이루어져 있으면 true. 그 외의 값이 있다면 false를 반환해주는 것 같은데...
이클립스에서 돌려보니 소괄호(())와 문자의 시작과 끝을 나타내는 ^,$는 없어도 잘 돌아가는 것 같다.
여러가지 예제를 만들어봤는데 생각대로 되지는 않지만 하다보면 알게 되겠지 뭐...
새로 알게된 것
- NumberFormatException
- matches()함수
'Tech > Algorithm' 카테고리의 다른 글
프로그래머스)level.1_소수 찾기(에라토스테네스의 체) (0) | 2019.04.04 |
---|---|
프로그래머스)level.1_하샤드 수 (0) | 2019.04.03 |
프로그래머스)level.1_완주하지 못한 선수(hash 공부하고 쓸것) (0) | 2019.04.03 |
프로그래머스)level.1_모의고사 (0) | 2019.04.03 |
프로그래머스)level.1_k번째 수 (0) | 2019.04.03 |
댓글