알고리즘 문제

데일리 루틴 36번 - 문자열 다루기 기본

nbcssw 2024. 8. 20. 19:52

https://school.programmers.co.kr/learn/courses/30/lessons/12918

 

프로그래머스

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

programmers.co.kr

\

처음에 작성한 코드

function solution(s) {
    var answer = true;
    let isNumber = true;
    
    for(let i=0; i<s.length; i++){
        if (!Number(s[i])){
            isNumber = false;
        }
    }
    
    if((s.length !== 4 && s.length !== 6) || !isNumber)
        answer = false;

    return answer;
}

코드 실행은 잘 됐지만, 제출을 하니 몇몇 테스트에서 실패가 떠서 틀렸다.

 

 

다시 시도해본 방법 (1)

조건을 하나 하나 따지면서 조건에 맞지 않으면 바로 false를 return하는 방법

function solution(s) {
    var answer = true;
    let isNumber = true;
    
    if (s.length !== 4 && s.length !== 6)
        return false;
    
    for(let i=0; i<s.length; i++){
        if(!Number(s[i]))
            isNumber = false;
    }
    
    if(!isNumber)
        return false;
    
    return answer;
}

처음에 작성한 코드와 실패하는 테스트가 똑같았다.. 근본적인 알고리즘이 바뀌지 않아서인듯

 

 

다시 시도해본 방법(2)

isNumber가 false인 조건으로 사용한 !Number(s[i])가 문제였다.

0도 falsy한 값이기 때문에 문자열에 0이 포함된 경우에도 false를 반환해버린 것이었다.

조건을 바꿔주니 바로 해결되었다.

function solution(s) {
    var answer = true;
    let isNumber = true;
    
    for(let i=0; i<s.length; i++){
        if(s[i] % 1 != 0)
            isNumber = false;
    }
    
    if((s.length !== 4 && s.length !== 6) || !isNumber)
        answer = false;

    return answer;
}