문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
s
는 길이 1 이상, 길이 8 이하인 문자열입니다.s
는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.s 의 대소문자 알파뱃을 제거하고,
s 와 s1 의 길이를 비교해서 다르면 false 를 출력하게 만들었지만 4개의 테스트에서 통과하지 못했다.
아무리 봐도 코드상에 문제는 없어보여서 문제를 다시 꼼꼼하게 읽어보니
s 에 알파뱃 여부만 확인하는 것이 아닌 4 또는 6 의 길이가 맞는지도 확인해야 되는 문제였다.
class Solution {
public boolean solution(String s) {
boolean answer = true;
String s1 = s.replaceAll("[a-z,A-Z]", "");
if (s.length() != s1.length()) answer = false;
return answer;
}
}
문제를 다시 확인한 후 조건문으로 한번 더 필터링을 해주니 테스트가 통과 되었다.
아주 쉬운 문제지만 문제를 잘못 읽어서 통과하지 못했다.
문제를 차근 차근 파악할 수 있도록 하자.
class Solution {
public boolean solution(String s) {
boolean answer = false;
String s1 = s.replaceAll("[a-z,A-Z]", "");
if (s.length() == 4 || s.length() == 6) {
if (s.length() == s1.length()) answer = true;
}
return answer;
}
}
s 를 int 로 케스팅 해서 성공하면 true 를 반환,
실패하는 false 를 반환하는 방식으로 문제를 해결했다.
알고리즘 테스트에서 try / catch 문을 사용한다는 생각을 전혀 하지 못했기 때문에 정말 창의적으로 느껴젔다.
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;
}
}
matches 문법을 사용해 0-9 의 숫자만 매칭될 경우 true 를
아닐경우 false 를 반환 시키는 창의적인 방법이다.
import java.util.*;
class Solution {
public boolean solution(String s) {
if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)");
return false;
}
}
알파벳을 제거하는 것이 아닌 split 를 사용해 숫자를 제거해 0 보다 클 경우 flase,
0 일경우 true 를 반환하는 방식이다.
class Solution {
public boolean solution(String s) {
return (s.length() != 4 && s.length() != 6)
|| (s.split("[0-9]").length > 0)
? false:true;
}
}
🔗 matches
🔗 split