Programmers/Level 1

[Javascript] 프로그래머스 : 문자열 내 p와 y의 개수

emayom 2021. 7. 3. 23:36

[Javascript] 프로그래머스 Level1 _ 문자열 내 p와 y의 개수

 

👇🏻

Link_Click

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)


1.

첫번째 시도는 무난하게 pCount 와 yCount 를 선언하고

map으로 배열 s를 돌면서 p,P 나 y,Y가 있을 경우 카운팅을 한 후 카운트 값이 같은지로 true / false를 리턴했다.

function solution(s){
    var pCount = 0;
    var yCount = 0;
    
    s = s.split('');
    
    s.map((el) => { if(el == 'p' || el == 'P')
                        pCount += 1;
                    else if(el == 'y' || el == 'Y')
                        yCount += 1; });

    return pCount == yCount;
}

2.

대, 소문자를 구분해서 확인하는 게 번거로워 1차적으로 문자를 모두 대문자로 변환하였다.

function solution(s){
    var pCount = 0;
    var yCount = 0;
    
    s = s.toUpperCase().split('');
    
    s.map((el) => { if(el == 'P')
                        pCount += 1;
                    else if(el == 'Y')
                        yCount += 1; });

    return pCount == yCount;
}

3.

다른 사람의 풀이를 확인하다가 아래와 같이 대문자로 변환한 s를 P의 배열과 Y의 배열로 나누어 길이가 같은지를 반환하는 코드가 있었다.

return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;

조금 변경해서 아래와 같이 적었더니 통과가 되었다.

function solution(s){
    s = s.toUpperCase();
    return (s.split('P').length == s.split('Y').length)
}

근데 이게 어떻게 가능한 건지 이해가 안되어서 리턴해봤다.

 

return s.toUpperCase().split("P"); length = 3 ["", "", "OOOYY"]
return s.toUpperCase().split("Y"); length = 2 ["P", "", ""]

 

P를 기준으로 끊으면 p의 개수 + 1 길이의 배열이 만들어지고 

Y를 기준으로 끊이면 y의 개수 +1 길이의 배열이 만들어진다.

다른 테스트 케이스를 추가해봤는데도 모두 잘 나왔다!

여기에 이런 패턴이 있을 거라고는 생각 못했는데 신기했다... split은 이렇게 쓰는 거구나 싶었다.

 

 

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***