상세 컨텐츠

본문 제목

프로그래머스 Level1 - 문자열 내 p와 y의 개수 (JavaScript)

Tech/JavaScript 코딩테스트

by 2020. 5. 10. 01:31

본문

 

처음에는 모든 문자열을 하나씩 비교하는 방법을 사용했습니다.

 

function solution(s){
    var answer = true;
    var p=0, y=0;
    for (var i in s){
        if(s[i]=='p'){
            p++;
        }
        if(s[i]=='y'){
            y++;
        }
    }
    if(p!==y){answer = false;}
    return answer;
}

 

그런데 테스트 케이스를 많이 통과하지 못해서.....

문자열 탐색에 사용할 수 있는 자바스크립트 함수가 있는지 찾아보았습니다!

그래서 찾은 함수는 match!!!!!!!

 

var res = 전체문자열.match(/찾을문자열/g);

 

을 이용하면 문자열에서 탐색을 할 수 있습니다.

뒤에 g를 붙여줘야 전체 문자열에서 탐색을하는거구요, g를 붙이지 않으면 문자열을 한번찾고 끝!이게 됩니다.

 

그러니까,

var res = 'Hello everyone'.match(/e/g);

를 하게되면, res = ['e','e','e']  가 되는데

 

var res = 'Hello everyone'.match(/e/); 를 하게되면

res = ['e', index: 1, input: "Hello everyone, groups: undefined] 이런식으로 나옵니다....

 

그래서 개수를 세고 싶거나 전체 문자열에서 몇개있는지알고 싶으면 위에 g를 함께 쓰는 방법을 써야해요!

 

그럼이제 코드를 고쳐봅시다...!

 

function solution(s){
    var answer = true;
    s = s.toLowerCase();
    var p = s.match(/p/g);
    var y = s.match(/y/g);
    
    if(p===null){p=[];}
    if(y===null){y=[];}
    
    if(p.length!=y.length){answer = false;}
    return answer;
}

 

먼저, 문자열을 받아와서 전부 소문자로 바꿔줍니다. (처음에 이걸 안해서 계속 실패했었습니다...ㅠㅠ)

그리구, 각각 p,y와 얼마나 match하는지 match함수를 써주었구요,

아무것도 match하지않을 때는 null값으로 반환되기 때문에 if문을 써서 빈 배열로 다시 바꾸어주었습니다.

 

그 후, if 문을 이용해서 길이가 다를 때는 answer을 false 값으로 바꾸어 주었습니다!

관련글 더보기