(장준영) 프로그래머스 - 옹알이(1)

2024. 5. 29. 12:27JavaScript PS


문제 정의

문자열 들이 담겨있는 배열을 받으면

그 배열에 담긴 각각의 문자열 안에 "aya", "ye", "woo", "ma" 들이 몇개가 포함이 되는지에 대해 계산하라는 문제다

단 각각의 문자열 안에  "aya", "ye", "woo", "ma" 들이 최대 1번씩만 포함될 수 있다

 

"ayaye" 는  "aya" + "ye" 로 2개 다

"ayayeaya" 는 "aya" + "ye" + "aya" 인데 

각 문자열 안에 "aya", "ye", "woo", "ma" 들이 최대 1번씩만 포함될 수 있으니까

"ayayeaya" 는 "aya" + "ye" + "aya" 지만 2개 로 계산되어야한다

 

근데 여기서 드는 생각은 

각각의 문자열 안에  "aya", "ye", "woo", "ma" 들이 최대 1번씩만 포함될 수 있다

라는말은 

"ayayeaya" 와 같은 입력은 절대 들어오지 못한다 라는 말과 같다고 생각한다

그래서 "ayayeaya" 같은 값들이 들어왔을 경우의 상황은 생각하지 말고

 

그냥  배열에 담긴 각각의 문자열 안에 "aya", "ye", "woo", "ma" 들이 몇개가 포함이 되는지에 대해 계산하는것

에만 충실하면 되지않을까? 라는 생각을 하고있다 

 

문제 풀이

우선 해당 문제를 해결하기위해서 필요한 코드를 찾아야한다

배열 내에 포함된 문자열을 찾는 게 아니라

배열 내에 포함된 문자열 내의 특정 문자를 찾는게 목적이기떄문에 그에 맞는 코드를 찾아야한다

 

참조 : https://deeplify.dev/front-end/js/search-text-in-string-with-index-of

 

indexOf() 를 사용하는거다

indexOf() 는 배열 내에서 특정 문자열이 위치한 인덱스 번호를 리턴해주는데

문자열에서도 사용할 수 있다 

indexOf() 는 문자열 내에서 특정 문자가 위치한 인덱스 번호를 리턴해준다

그리고 배열이든, 문자열이든 특정 문자열이나 문자가 없을 경우 -1 을 리턴하게된다

 

포함하는지 안하는지 여부만 판단하면 되고

한 문자열당 특정 문자가 최대 1번만 포함될 것이기때문에 

문자열을 indexOf() 를 통해 검사하여 -1이 리턴되는지 아닌지만 판단하면 된다

 

forEach() 를 통해서 배열에 있는 각 문자열에 접근하고

그 문자열에

indexOf( "aya" )

indexOf( "ye" )

indexOf( "woo" )
indexOf( "ma" )

검사를 돌려서 -1이 아닌것이 있다면 +1 카운트를 해주면 될것이다 

그리고 최종적인 카운트된 수를 리턴해주면 문제가 해결될것이다 

 

코딩

function solution(babbling) {
    var answer = 0;
    return answer;
}

문제에서 위 함수를 완성시키는 방법으로 문제를 해결하라고 제시했다

 

babbling 에 배열값들이 들어올거고

answer 이 최종적으로 카운트된 수가 될것으로 보인다

function solution(babbling) {
    let answer = 0;
    
    babbling.forEach(function(a){
        if(a.indexOf("aya") != -1){answer = answer + 1} 
        if(a.indexOf("ye") != -1){answer = answer + 1}
        if(a.indexOf("woo") != -1){answer = answer + 1}
        if(a.indexOf("ma") != -1){answer = answer + 1}
    })
    
    return answer;
}

 

 

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일단 내가 문제를 ㅈ대로 이해했다

일단 기댓값만 보면

한 문자열에 포함된 "aya", "ye", "woo", "ma" 의 최대 갯수인가 ? 싶다

그럼 저 기댓값이 나오는게 말이 된다 

function solution(babbling) {
    let answer = 0;
    let max = 0
    
    babbling.forEach(function(a){
        if(a.indexOf("aya") != -1){max = max + 1} 
        if(a.indexOf("ye") != -1){max = max + 1}
        if(a.indexOf("woo") != -1){max = max + 1}
        if(a.indexOf("ma") != -1){max = max + 1}
        if(answer < max){
            answer = max    
        }
        max = 0
    })
    
    return answer;
}

일단 이렇게 작성하면

테스트 통과가 되긴한다

제출이나 해보자

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이럴줄 알았다, 에초에 문제를 ㅈ같이 이해한거긴한데 야메로 통과할수있지않을까? 싶었다

개 망상이였다

 

내일 다시 도전해보자 !! 수고요~

'JavaScript PS' 카테고리의 다른 글

(김유선) 프로그래머스 - 옹알이(1)  (0) 2024.05.29