문자열 다루기 기본 - 조건을 끝까지 읽자

나의 기록·2026년 6월 23일

코딩테스트

목록 보기
17/35

문제 링크

프로그래머스 - 문자열 다루기 기본


처음 작성한 코드

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        
        for(int i=0; i<s.length();i++){
            if(s.charAt(i)>57){
                answer = false;
            }
        }
        
        return answer;
    }
}

뭐가 문제였나?

1. 문제 조건을 끝까지 안 읽었다

확인해야 할 조건이 두 가지인데 하나를 아예 빠뜨렸다.

  • ✅ 숫자로만 구성되어 있는가
  • 길이가 4 혹은 6인가 → 처음 코드에 없었음

💡 간단해 보이는 문제일수록 조건을 빠뜨리기 쉽다.
코드 작성 전에 체크해야 할 조건을 먼저 리스트업하고 시작하자.


2. ASCII 비교가 절반만 됐다

숫자의 ASCII 범위는 48('0') ~ 57('9') 인데, 처음엔 위쪽(> 57)만 막았다.

// ❌ 위쪽만 막음
if(s.charAt(i) > 57)

// ❌ 양쪽을 막았지만 범위가 틀림
if((s.charAt(i)-'0') <= 10 && (s.charAt(i)-'0') >= 0)

// ✅ 올바른 ASCII 범위 체크
if((s.charAt(i)-'0') <= 9 && (s.charAt(i)-'0') >= 0)

예시: !의 ASCII는 33 → > 57 조건을 그냥 통과해버림


3. 길이 조건 논리 실수

"길이가 4 혹은 6이 아니면 false" 를 코드로 옮기는 과정에서 여러 번 틀렸다.

// ❌ 동시에 4이면서 6일 수 없음 → 항상 false
if(s.length() == 4 && s.length() == 6)

// ❌ 항상 true → 모든 길이에서 return false
if(s.length() != 4 || s.length() != 6)

// ✅ 정답
if(s.length() != 4 && s.length() != 6)

💡 드모르간 법칙: !(A || B) = !A && !B
"4 또는 6이다"의 부정 = "4가 아니다 AND 6이 아니다"

헷갈리면 실제 값을 직접 대입해서 참/거짓을 따져보자.


최종 코드

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;
    }
}

핵심 포인트

포인트내용
길이 조건s.length() != 4 && s.length() != 6
숫자 판별Character.isDigit(c)
조기 리턴조건 불만족 시 즉시 return false

배운 것

Character.isDigit() 을 쓰자

ASCII 계산으로 직접 비교하는 것보다 Character.isDigit() 이 훨씬 가독성이 좋다.
문자 관련 판별은 Character 클래스를 먼저 찾아보는 습관을 들이자.

// ❌ ASCII 직접 계산 → 의도 파악이 어렵다
(s.charAt(i)-'0') <= 9 && (s.charAt(i)-'0') >= 0

// ✅ Character 클래스 활용 → 한눈에 읽힌다
Character.isDigit(s.charAt(i))

코딩 전에 조건부터 리스트업하자

간단해 보이는 문제일수록 조건을 빠뜨리기 쉽다.
코드 작성 전 30초만 투자해서 조건을 먼저 정리하고 시작하자.

profile
뭐든 남겨본다

0개의 댓글