알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

https://programmers.co.kr/learn/courses/30/lessons/12918

 

코딩테스트 연습 - 문자열 다루기 기본

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1

programmers.co.kr


Think🤔

모든 문자가 숫자면 true를 리턴해준다.

charAt으로 하나하나 비교해서 각 자리의 값이 1~9사이면 true를 반환 하나라도 틀리면 false를 반환하게 한다.


Solution✍
class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        if(s.length() != 4 && s.length() != 6){
            return false;
        }
        
        for(int i=0; i<s.length(); i++){
            if(s.charAt(i) < 48 || s.charAt(i) > 57){
                return false;
            }
        }
        
        return answer;
    }
}

문제를 보면 문자열의 길이가 4 또는 6이므로 길이가 1,2,3 같은 조건에 맞지 않으면 false를 반환시켜 줘야한다.

아스키 코드를 이용해서 48~57까지가 숫자 0~9를 나타내므로 그 사잇값이 아닌 값이 나오면 false를 리턴하면 된다.


Review🤩

엄청난 코드를 두 가지 봤다.

하나는 try catch문을 이용해서 NumberFormatException의 예외가 발생하면 false를 리턴하는 방식이고,

다른 하나는 매치스를 이용한 방법이다.

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;
            }
        }
        
        return false;
    }
}

직접 작성해 보았고, int x라는 변수를 하나 만들어서 형 변환이 불가능 하면 NumberFormatException이 발생해서 false를 반환 시킨다. 하지만 예외는 실제 예외 상황일때만 사용하는거라 적절하지는 않은 것 같다.

class Solution {
    public boolean solution(String s) {
        if(s.length() == 4 || s.length() == 6){
            return s.matches("(^[0-9]*$)");
        }
        
        return false;
    }
}

matches를 살펴보면

 

^ : 문자열 시작

$ : 문자열 종료

* : 앞 문자가 없을 수도 무한정 많을 수도

[] : 문자의 집합이나 범위를 나타내면 - 기호로 범위를 나타냄

 

여기서 좀 더 나아가서 길이 검사도 정규식으로 표현할 수 있다고 한다.

class Solution {
    public boolean solution(String s) {
        return s.matches("(^[0-9]{4}|{6}$)");
    }
}

단 한줄로 길이까지 검사했다. 

{} : 횟수 또는 범위를 나타낸다고 한다. 총 4번 나오거나 6번 나오면 범위에 맞음


 

+ Recent posts