알고리즘 문제/Java

[프로그래머스, Lv1] 문자열 다루기 기초

Cocori_ 2024. 7. 18. 20:51

코딩테스트 연습 - 문자열 다루기 기본 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

문제설명

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

 

제한 사항

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

 

접근 방법

우선 제일먼저 문자열의 길이가 4 or 6인지 체크하고, 길이가 4 or 6이 아닌 경우 바로 false를 반환하게 하였다.

그 이후, 문자열을 순회하며 해당 문자가 숫자가 아닌 경우, 즉시 false를 반환하면 어떨까 싶었다.

 

그렇게 완성된 코드는 다음과 같았다.

1차 코드

더보기
class Solution {
    public boolean solution(String s) {
        if(s.length() != 4 && s.length() != 6)
        {
            return false;
        }
        
        for(int i = 0; i < s.length(); ++i)
        {
            if(!(s.charAt(i) >= '0' && s.charAt(i) <= '9'))
            {
                return false;
            }
        }

        return true;
    }
}

 

코드 자체는 문제 없이 통과됐지만, 해당 문자가 숫자인지 판별하는 부분이 너무 불편했다.

C++에서 해당 문자가 숫자인지 확인할 때 사용하는 isdigit 함수가 있던 것이 떠올라,

isdigit을 사용해보기로 했다.

 

최종 코드

더보기
class Solution {
    public boolean solution(String s) {
        if(s.length() != 4 && s.length() != 6)
        {
            return false;
        }
        
        for(int i = 0; i < s.length(); ++i)
        {
            if(!Character.isDigit(s.charAt(i)))
            {
                return false;
            }
        }

        return true;
    }
}

 

해당 코드로 작성하였고 통과 되었다.

[ 통과 ]

 

후기

다른 사람이 짠 코드를 보던 중, 신기한 방법이 눈에 보였다.

"

Integer.parseInt를 활용하여 int형으로 변환을 시도

             => 실패시 문자열이 섞여있으므로 false 반환, 성공시 숫자만 있으므로 true 반환

                                                                                                                                           "

방법이었는데, for문을 사용하지 않고 접근하는 방식이 신선했고,

문제처럼 양수만 나오는 것이 아닌 음수도 섞여서 나오는 상황에서 

코드 부피 줄일 때 사용하면 좋을 것 같았다.