[CodingTest] 문자열 다루기 기본

hye·2023년 3월 2일
0

AlgorithmTest

목록 보기
24/95

📖 Exam

문제 설명

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

제한 조건

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

입출력 예

sresult
"a234"false
"1234"true

✍ Answer

import java.util.regex.Pattern;

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

💡 Realization

  • 정규표현식 쓰면 쉽게 풀꺼 같은데? 생각은 들었는데 자바에서 정규표현식 라이브러리 사용해본적이 없어서(그동안 js로만 했다) 노가다로 풀어보면 어떨까 하고 풀어봤는데 조건문 만족하기가 쉽지않아 결국 정규표현식 라이브러리 검색해서 사용하였다.
  • 조건의 조건을 만족해야하는 경우인데다 리턴을 정확히 해야해서 저렇게 풀긴했는데 다른 분들은 어떻게 푸셨으려나 궁금해지는 문제였다.

try-catch(NumberFormatException)

  • Exception 생각은 했는데 표현을 못해서 이 방법으로는 못풀었네.
  • 실무에서는 예외처리로 로직처리 하면 안된다고한다.
    흐름제어를 위해서 예외로 처리하는건 금기시 되는 풀이. 예외는 실제 예외 상황일 때만 사용하라

정규식 Rex

길이 검사도 정규식으로 해야지라는걸 왜 생각 못했지.
회원가입 로그인할 때 그렇게 주구장창 해놓고... 뭔가 스크립트에서 짜던거 생각을 못해낸 것도 허탈

import java.util.*;
class Solution {
  public boolean solution(String s) {
        return s.matches("^(?=(?:.{4}|.{6})$)[0-9]*$");
  }
}

split(regex)

split() 안에 정규표현식 사용 가능한거같아서 처음에 써서 풀어보다가 이렇게 하는게 맞는지 애매해서 나는 다른 풀이로 정답을 찾았다.
다른 분이 푸신거 풀어서 해석해보니 숫자로 문자열을 나눠서 그 길이 값을 찾는건데 숫자로만 이뤄진 문자열은 배열이 만들어지지않기때문에 저런 방법으로 추론하는 것이었다.

class Solution {
  public boolean solution(String s) {
    return (s.length() != 4 && s.length() != 6) || (s.split("[0-9]").length > 0) ? false:true;
  }
}

참고사이트: https://school.programmers.co.kr/learn/courses/30/lessons/70128/solution_groups?language=java

profile
Junior Backend Developer

0개의 댓글