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

Jun_Gyu·2023년 8월 22일
0

프로그래머스

목록 보기
6/14


첫 풀이

문제는 기본인데 이해하는데 5분넘게 걸림

문자열 S의 길이는 4 또는 6이며, 문자열이 "only" 숫자로만 구성되었는지
Boolean 타입으로 나타내는 문제이다.

마침 얼마전 강의에서 JS 정규식에 대해서 배웠는데,
위의 문제에서 우선적으로 숫자가 연속적인지를 확인하는 방법을 정규식을 통해서 한번 해결해보기로 했다.

const solution = (s) => {
    let answer = false;
    if(s.length === 4 || s.length === 6){
        if(s.match(/\d{4}/g)){ // 숫자 4자리가 일치하는지 정규식으로 확인
            return !answer;
        }
    }
    return answer;
}

위와같이 코드를 작성했고, 이제 확인해보도록 하자.









풀이개선

내가 한가지 간과하고 있었던 점이 있었다..

처음에 문제를 읽고
'아 숫자가 4자리만 연속으로 있으면 True를 반환하면 되는건가?'
라고 잘못 이해한 상태에서 문제를 푸는 과오를 범했다..

4자리 문자열에서는 당연히 1234와 같은 케이스는 통과하지만,
6자리 문자열에서는 aa1234와 같이 중간에 문자가 포함되는 반례가 존재했는데, 이부분을 간과했던 것이다.. ㅠㅠ

그래서 문자열이 존재하는지 여부를 판단하는 조건문을 한가지 더 추가해서 코드를 수정했다.

const solution = (s) => {
    let answer = false;
    if(s.length === 4 || s.length === 6){
        if(s.match(/[a-z]{1,}/gi)){ // 문자를 1개 이상 포함하는지
            return answer;
        }
        if(s.match(/\d{4}/g)){ // 숫자 4자리가 일치하는지
            return !answer;
        }
    }
    return answer;
}

사실 두번째 조건문에서 숫자가 4자리 이상인지if(str.match(/\d{4,}/g)){으로 표현하는것이 직관적으로는 올바르나,

생각해보면 이미 문자열에 문자가 존재하지 않는다는 조건문을 거친 이상
4개 연속으로 일치하던, 4개 이상으로 일치하던 정답을 추론하는데 있어서는
크게 문제되지 않는것을 알 수 있었다.

profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글