[Java] 문자열 다루기 기본 (programmers)

Haeun Noh·2023년 4월 4일
0

programmers

목록 보기
38/64
post-thumbnail

0405


💡문제 설명

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


💡제한 사항

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

💡입출력 예

sreturn
"a234"false
"1234"true


💡풀이 방법

solution함수를 완성하려면
1. 문자열 s의 길이가 4 또는 6이어야 하고
2. 숫자로만 구성 되어야 한다.

그렇다면 s.length4또는 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 이상의 값을 가지고 있다면 문자열을 포함한 문자열이기 때문에 answerfalse를 저장한다.

이미 숫자만으로 이루어지지 않았다는 사실을 알기 때문에 더 이상의 for문 반복은 의미가 없다.
따라서 answerfalse가 된 순간 바로 break를 걸어준다.


        else
            return false;
        return answer;

문자열의 길이가 4 또는 6이 아닐 경우에도 falsereturn한다.

문제의 조건에 모두 부합하는 문자열이라면 초깃값 그대로인 truereturn한다.



💡소스 코드

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}$");
    }
}

정규식으로 문제를 해결하니 확실히 실행 시간이 빨라지게 되었다.



💡실행 결과



profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글