문자열 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}$");
}
}
정규식으로 문제를 해결하니 확실히 실행 시간이 빨라지게 되었다.