
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
s는 길이 1 이상, 길이 8 이하인 문자열입니다.s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.s | return |
|---|---|
"a234" | false |
"1234" | true |
solution함수를 완성하려면
1. 문자열 s의 길이가 4 또는 6이어야 하고
2. 숫자로만 구성 되어야 한다.
그렇다면 s.length가 4또는 6인지를 판별하고
문자열의 시작인 A(65)이상의 값을 가지고 있다면 문자열을 포함한다고 판별할 수 있겠다.
boolean answer = true;
나는 틀린 경우의 수를 찾을 것이므로 초깃값을 true로 준다.
char ch;
if ( s.length() == 4 || s.length() == 6 ) {
for ( int i = 0; i < s.length(); i++ ) {
ch = s.charAt(i);
if (ch >= 'A') {
answer = false;
break;
}
}
}
문자열 s의 길이가 4 또는 6인지를 판별한 뒤,
조건에 부합하다면 s의 각 문자를 charAt으로 해당 순서의 char문자를 ch에 저장하여 만약 ch가 'A', 즉 65 이상의 값을 가지고 있다면 문자열을 포함한 문자열이기 때문에 answer에 false를 저장한다.
이미 숫자만으로 이루어지지 않았다는 사실을 알기 때문에 더 이상의 for문 반복은 의미가 없다.
따라서 answer이 false가 된 순간 바로 break를 걸어준다.
else
return false;
return answer;
문자열의 길이가 4 또는 6이 아닐 경우에도 false를 return한다.
문제의 조건에 모두 부합하는 문자열이라면 초깃값 그대로인 true를 return한다.
class Solution {
public boolean solution(String s) {
boolean answer = true;
char ch;
if ( s.length() == 4 || s.length() == 6 ) {
for ( int i = 0; i < s.length(); i++ ) {
ch = s.charAt(i);
if (ch >= 'A') {
answer = false;
break;
}
}
}
else
return false;
return answer;
}
}
🔥 다른 사람들의 풀이를 보다가 정규식으로도 풀 수 있다는 사실을 알게 되었다.
^ : 시작을 의미한다.\d : 0~9까지의 숫자를 의미한다. [0-9]와 동일하다.| : 또는 을 의미한다.{} : 개수 를 의미한다.$ : $앞의 문자 또는 숫자로 끝나는 단어를 의미한다.class Solution {
public boolean solution(String s) {
return s.matches("^[0-9]{4}$|^[0-9]{6}$");
}
}
정규식으로 문제를 해결하니 확실히 실행 시간이 빨라지게 되었다.
