[프로그래머스, Lv1] 문자열 다루기 기초
코딩테스트 연습 - 문자열 다루기 기본 | 프로그래머스 스쿨 (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문을 사용하지 않고 접근하는 방식이 신선했고,
문제처럼 양수만 나오는 것이 아닌 음수도 섞여서 나오는 상황에서
코드 부피 줄일 때 사용하면 좋을 것 같았다.