반응형

문제 설명

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

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

public class StringExercise {

    public static void main(String[] args) {
        String str = "912345";
        System.out.println("RESULT : "+ solution(str) );
    }

    public static boolean solution(String s) {
        boolean answer = false;
        try {
            if(s.length()==4 || s.length()==6){
                Integer number = Integer.parseInt(s);
                if(number > 0)
                    answer = true;
            }
        }catch (Exception e){ e.printStackTrace(); }
        return answer;
    }
}

접근

별 다른 로직이 필요 없어 보이고, 역시 가장 단순하지만 기본적인 접근으로 시작!
간단한 조건식(if)과 try/catch로 처리가 가능해보여서 작성하다 보니까 완성했는데, Best 풀이라 딱히 언급할건 없어보임

중간에 5,6번과 11번 데이터에 대한 처리가 약간 골치였지만!  음수, 자리수를 잘 처리해주었다.

다른 사람의 풀이

    // 정규식을 활용한 다른 사람의 풀이
    public static boolean solution2(String s) {
        boolean answer = false;
        if(s.length()==4 || s.length()==6){
            String pattern = "^[0-9]*$";
            return s.matches(pattern);
        }
        return answer;
    }

대동소이하나, 보통 정규식의 유무 정도만 다르고 대체로 다른 답도 비슷해 보인다.

느낀점

  • 자주 쓰이는 정규식은 잘 알아두면 항상 편리하니까 정리!
    str.matches("^[0-9]*$")  // 숫자만 있는지 확인
    str.matches("^[a-zA-Z]*$")  // 문자(영어)만 있는지 확인
    str.matches("^[a-zA-Z0-9]*$")  // 문자(영어)+숫자만 있는지 확인
    • matches는 뒤의 정규식이 있는지 boolean으로 결과 반환
    • ^ : 문자열 시작
    • [ ] : 문자의 집합
    • * : 앞문자가 많거나 무제한일수 있음 (*$: 자리수 상관없이 확인할때)
    • $ : 문자열 끝
    • ^[a-zA-Z]*$  : 첫 문자
  • 자주 쓸때는 좀 익숙하다가도, 오랜만에 보니까 정규 표현식이 기억이 안난다.
    https://moonong.tistory.com/31 참고하자!

 

반응형

+ Recent posts